【问题标题】:sqoop exec job in oozie is not workingoozie 中的 sqoop exec 作业不起作用
【发布时间】:2019-04-16 04:07:10
【问题描述】:

我正在运行一个 3 节点 HDP 2.2 集群。 Oozie 版本是 4.1.0.2.2,Sqoop 版本是 1.4.5.2.2。我正在使用 Sqoop 作业从 RDBMS 到 HDFS 进行增量导入,如下所示,

sqoop job –create JOB1 –meta-connect “jdbc:hsqldb:hsql://ip-address:16000/sqoop” — import –connect jdbc:oracle:thin:@ip-address:db –username db_user –password-file hdfs://ip-address:8020/user/oozie/.password_sqoop –table TABLE1 –target-dir /user/incremental/ –incremental lastmodified –check-column LAST_UPDATED –last-value “2013-08-12 18:13:44.0″ –merge-key ID –fields-terminated-by ‘|';

sqoop 作业 –exec JOB1

从命令提示符运行时,上述 2 个 sqoop 命令运行良好。我正在使用 sqoop-metastore (HSQLDB) 来存储 sqoop 作业。

sqoop 创建作业正在 OOZIE 中工作,我可以在 oozie 作业完成后看到 sqoop 作业在 sqoop-metastore 中列出。

但是当我将 sqoop exec 作业放入 oozie 工作流时,我得到了“Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]” 错误。然而,底层的 map reduce 作业显示为已成功完成。检查 /var/log/oozie 中的日志,但也没有。

工作流.xml:

<workflow-app xmlns=”uri:oozie:workflow:0.4″ name=”oozie-wf”>
<start to=”sqoop-wf”/>
<action name=”sqoop-wf”>
<sqoop xmlns=”uri:oozie:sqoop-action:0.2″>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>fs.hdfs.impl.disable.cache</name>
<value>true</value>
</property>
</configuration>
<command>job –meta-connect “jdbc:hsqldb:hsql://ip-address:16000/sqoop” –exec JOB1</command>
</sqoop>
<ok to=”end”/>
<error to=”fail”/>
</action>
<kill name=”fail”>
<message>Failed, Error Message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name=”end”/>
</workflow-app>

job.properties:

nameNode=hdfs://ip-address:8020
jobTracker=ip-address:8050

oozie.wf.application.path=hdfs://ip-address:8020/user/oozie/sqoopoozie
oozie.use.system.libpath=true
oozie.sqoop.log.level=DEBUG

我在 oozie 中尝试了多种不同的 sqoop exec 作业方式,但没有任何效果。请帮忙。

【问题讨论】:

  • 我很惊讶您的代码可以在命令提示符下运行,因为您首先在特定的元存储中定义一个作业,然后您执行相同的作业而不指定哪个元存储它被定义为

标签: oozie sqoop2 sqoop


【解决方案1】:

请确保您在 sqoop-site.xml 中指定了您的元存储,并且您在您的 oozie 工作流文件夹中传递了站点 xml。您可以使用 xml 标签传递它。

【讨论】:

  • 是 oozie 工作流中使用的标签
【解决方案2】:

sqoop job --exec JOB1 在命令提示符下的工作方式让我感到困惑。执行作业的正确语法(从命令提示符)是

sqoop job --exec JOB1 --meta-connect jdbc:hsqldb:hsql://ip-address:16000/sqoop

也许您是从运行您的 sqoop 元存储的同一台机器上执行的作业

请确保您已完成以下操作

  1. 在 ip=ip-address 的机器上启动了 sqoop Metastore
  2. 在 sqoop-site.xml 中进行了必要的配置更改(关注 this 链接)

至于oozie工作流,试试下面的workflow.xml

<workflow-app xmlns=”uri:oozie:workflow:0.4″ name=”oozie-wf”>
    <start to=”sqoop-wf”/>
    <action name=”sqoop-wf”>
        <sqoop xmlns=”uri:oozie:sqoop-action:0.2″>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>fs.hdfs.impl.disable.cache</name>
                    <value>true</value>
                </property>
            </configuration>
            <arg>job</arg>
            <arg>--exec</arg>
            <arg>JOB1</arg>
            <arg>--meta-connect jdbc:hsqldb:hsql://ip-address:16000/sqoop</arg>
        </sqoop>
        <ok to=”end”/>
        <error to=”fail”/>
    </action>
    <kill name=”fail”>
        <message>Failed, Error Message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name=”end”/>
</workflow-app>

【讨论】:

    【解决方案3】:

    在我们的集群中,通过 Hue UI 创建作业而不指定元存储(使用--meta-connect 参数)导致作业仅有时sqoop job --list 命令返回。在命令提示符下,在同一台机器上创建和列出工作;但是,机器 B 找不到在机器 A 上创建的作业。

    如果您也无法访问作业,则可以访问在其他节点上创建的作业,您的 sqoop 元存储似乎没有运行。解决它:

    1. 使用sqoop-metastore 命令在其中一个节点上启动元存储,
    2. 检查 Metastore 是否正在运行:$ ps aux | grep sqoop 应该将结果之一作为 Sqoop Metastore 返回,
    3. sqoop-site.xml 文件中指定元存储路径。在我们的例子中,我们无法让 ot 工作,所以我们使用下一步来完成,
    4. 如有必要,在 shell 和 Hue UI 中,将每个 sqoop 作业命令(创建、列出、显示、执行、删除)中的元存储路径指定为
      $ sqoop job --exec my_job --meta-connect jdbc:hsqldb:hsql://node-running-metastore:16000/sqoop

    注意:要启动 Metastore,请考虑使用 &amp;nohup 在后台运行 Metastore 进程并将日志捕获到文件中:

    $ nohup sqoop-metastore &>> /tmp/nohup-sqoop-metastore.out &
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多