Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop oozie在shell脚本中运行Sqoop命令_Hadoop_Sqoop_Oozie_Oozie Coordinator - Fatal编程技术网

Hadoop oozie在shell脚本中运行Sqoop命令

Hadoop oozie在shell脚本中运行Sqoop命令,hadoop,sqoop,oozie,oozie-coordinator,Hadoop,Sqoop,Oozie,Oozie Coordinator,我可以在脚本中编写sqoop导入命令,并在oozie中作为协调工作流执行它吗 我已经厌倦了这样做,并且发现一个错误,说sqoop命令找不到,即使我给出了sqoop执行的绝对路径 script.sh如下所示 sqoop导入--connect'jdbc:sqlserver://xx.xx.xx.xx'-username=sa-password-table materials--以'^'结尾的字段--schema dbo-target dir/user/hadoop/CFFC/oozie_materi

我可以在脚本中编写sqoop导入命令,并在oozie中作为协调工作流执行它吗

我已经厌倦了这样做,并且发现一个错误,说sqoop命令找不到,即使我给出了sqoop执行的绝对路径

script.sh如下所示

sqoop导入--connect'jdbc:sqlserver://xx.xx.xx.xx'-username=sa-password-table materials--以'^'结尾的字段--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' />

${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
script.sh
script.sh#script.sh
脚本失败,错误消息[${wf:errorMessage(wf:lastErrorNode())}]

oozie返回一个错误,因为在mapreduce日志中找不到sqoop命令

那么这是一种好的做法吗


谢谢

正如您所观察到的,shell操作将作为映射程序任务运行。在运行映射程序的每个数据节点上都需要有sqoop命令。如果您确保sqoop命令行在那里,并且对提交作业的用户具有适当的权限,那么它应该可以工作

验证的方法可以是:

  • 以特定用户身份ssh到datanode
  • 运行命令行sqoop查看它是否工作

尝试将sqljdbc41.jarsqlserver驱动程序添加到HDFS中,并在workflow.xml中添加存档标记,如下所示,然后尝试运行oozie workflow run命令:

<archive>${HDFSAPATH}/sqljdbc41.jar#sqljdbc41.jar</archive>

将hive-site.xml保存在HDFS中,并在workflow.xml中添加文件标记,然后重新启动oozie workflow.xml

我已经这样做了,但是oozie返回了JA018错误代码和消息作为
Main class[org.apache.oozie.action.hadoop.ShellMain],退出代码[1]
。我已经将oozie指向了sqoop的sharelibs,但是它返回了那个错误。您解决了这个问题吗?我也面临同样的问题。如果你能帮助侯赛因·沙伊克,那就太好了
javax.jdo.option.ConnectionURL
hive.metastore.uris