我可以在脚本中编写sqoop import命令并在oozie中将其作为协调工作流程执行吗?
我已经厌倦了这样做并发现一个错误,说即使我给了sqoop执行的绝对路径,也找不到sqoop命令
script.sh如下
sqoop import --connect 'jdbc:sqlserver://xx.xx.xx.xx' -username=sa -password -table materials --fields-terminated-by '^' -- --schema dbo -target-dir /user/hadoop/CFFC/oozie_materials
我把文件放在HDFS中并给了oozie它的路径。工作流程如下:
<workflow-app xmlns='uri:oozie:workflow:0.3' name='shell-wf'>
<start to='shell1' />
<action name='shell1'>
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>script.sh</exec>
<file>script.sh#script.sh</file>
</shell>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name='end' />
oozie返回错误,因为在mapreduce日志中找不到sqoop命令。
这是一个好的做法吗?
谢谢
答案 0 :(得分:0)
shell动作将作为您观察到的映射器任务运行。 sqoop命令需要存在于运行映射器的每个数据节点上。如果你确保sqoop命令行在那里,并且对提交作业的用户有适当的权限,那么它应该可以工作。
验证方式可以是:
答案 1 :(得分:0)
尝试将 sqljdbc41.jar sqlserver驱动程序添加到HDFS,并在workflow.xml中添加归档变量,如下所示,然后尝试运行oozie workflow run命令:
<archive>${HDFSAPATH}/sqljdbc41.jar#sqljdbc41.jar</archive>
如果存在问题,那么..add hive-site.xml包含以下属性
javax.jdo.option.ConnectionURL
hive.metastore.uris
将hive-site.xml保留在HDFS中,并在workflow.xml中添加文件标记并重新启动oozie workflow.xml