我正在尝试使用Hadoop集群在Oozie中成功运行sqoop-action。 每当我检查工作状态时,Oozie都会返回以下状态更新:
这让我相信我的工作流程没有任何问题,而不是我遗漏的一些许可。
我的jobs.properties config:
nameNode=hdfs://mynamenode.demo.com:8020
jobTracker=mysnamenode.demo.com:8050
queueName=default
workingRoot=working_dir
jobOutput=/user/test/out
oozie.use.system.libpath=true
oozie.libpath=/user/oozie/share/lib
oozie.wf.application.path=${nameNode}/user/test/${workingRoot}
MyWorkFlow.xml:
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns='uri:oozie:workflow:0.4' name='sqoop-workflow'>
<start to='sqoop-load' />
<action name="sqoop-load">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/user/test/${workingRoot}/out-data/sqoop" />
<mkdir path="${nameNode}/user/test/${workingRoot}/out-data"/>
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<command>import --connect jdbc:oracle:thin:@10.100.50.102:1521/db --username myID --password myPass --table SomeTable -target-dir /user/test/${workingRoot}/out-data/sqoop </command>
</sqoop>
<ok to="end"/>
<error to="sqoop-load-fail"/>
</action>
<kill name="sqoop-load-fail">
<message>Sqoop export failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name='end' />
</workflow-app>
我采取的步骤:
我一直在搜索互联网和我的日志文件以寻求答案......任何提供的帮助都会非常感激....
更新
好的......所以我将/ usr / lib / sqoop / lib中的所有jar添加到/ user / oozie / share / lib / sqoop。我仍然得到同样的错误。检查工作日志......我之前没有发布过一些内容:
2014-10-03 11:16:35,586 WARN CoordActionUpdateXCommand:542 - USER [ambari-qa] GROUP [ - ] TOKEN [] APP [sqoop-workflow] JOB [0000015-141002171510902-oozie-oozi-W]行动[ - ] E1100:命令前置条件在执行前不成立,[,coord action为null],错误代码:E1100
正如您所看到的,我正在以“超级用户”的身份运行这项工作.....并且错误完全相同。所以这不是一个许可问题。我想除了那些需要在/ user / oozie / share / lib / sqoop目录中需要的jar之外还需要一个jar ......也许我需要将mapreduce的jar复制到/ user / oozie中/ share / lib / mapreduce?
答案 0 :(得分:2)
好的......问题解决了。
显然,Oozie Workflow / Job的每个组件都必须将相应的* .jar依赖项上传到与这些组件对应的Oozie SharedLib(/ user / oozie / share / lib /)目录。
我将/ usr / lib / sqoop / lib中的所有* .jars复制到 - &gt; /用户/ Oozie的/共享/ lib中 我将/ usr / lib / oozie / lib中的所有* .jars复制到 - &gt; /用户/ Oozie的/共享/ LIB / Oozie的
再次运行作业后......工作流程停滞不前,并且给出的错误与上一个错误不同....即这次......工作流程试图在HDFS上创建一个目录已经存在,所以我删除了该目录,然后再次运行该作业.....
SUCCESS!
备注:人们确实需要编写更好的异常消息。如果这只是一个问题,那么有几个人......那么好......但事实并非如此。如果网上求助请求有任何迹象,那么这个特殊错误就会让一些人适合。
答案 1 :(得分:0)
我遇到了同样的问题。只需添加一个
<archive>path/in/hdfs/ojdbc6.jar#ojdbc6.jar</archive>
到<sqoop> </sqoop>
标签中的workflow.xml,为我工作。得到了参考here。