oozie在Shell脚本中运行Sqoop命令

问题描述 投票:1回答:3

我可以在脚本中编写sqoop导入命令,并在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作为sqoop命令返回错误,但未在mapreduce日志中找到。

这是一个好习惯吗?

谢谢

hadoop sqoop oozie oozie-coordinator
3个回答
0
投票

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

验证方式可能是:

  • 以特定用户的身份SSH到datanode
  • 运行命令行sqoop以查看是否有效

0
投票

尝试将sqljdbc41.jar sqlserver驱动程序添加到HDFS,并按如下所示在工作流.xml中添加存档标记,然后尝试运行oozie工作流运行命令:

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

如果存在问题,则..添加具有以下属性的hive-site.xml,

javax.jdo.option.ConnectionURL
hive.metastore.uris

将hive-site.xml保留在HDFS中,并在工作流.xml中添加文件标签,然后重新启动oozie工作流.xml


0
投票

如何解决?我也面临着同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.