【发布时间】: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 作业方式,但没有任何效果。请帮忙。
【问题讨论】:
-
我很惊讶您的代码可以在命令提示符下运行,因为您首先在特定的元存储中定义一个作业,然后您执行相同的作业而不指定哪个元存储它被定义为!