在Hadoop集群上使用Oozie运行Sqoop Action的问题

时间:2014-10-02 20:32:51

标签: hadoop workflow sqoop oozie

我正在尝试使用Hadoop集群在Oozie中成功运行sqoop-action。 每当我检查工作状态时,Oozie都会返回以下状态更新:

操作

ID状态外部ID外部状态错误代码

0000037-140930230740727-oozie-oozi-W @:开始:好的 - 好的 -

0000037-140930230740727-oozie-oozi-W @ sqoop-load ERROR job_1412278758569_0002 FAILED / KILLEDJA018

0000037-140930230740727-oozie-oozi-W @ sqoop-load-fail确定 - 确定E0729

这让我相信我的工作流程没有任何问题,而不是我遗漏的一些许可。

我的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>

我采取的步骤:

  • 查找错误...没有发现我之前提到过的内容
  • 检查所需的ojdbc.jar文件是否可执行,以及/ user / oozie / share / lib / sqoop目录是否可在HDFS上访问
  • 检查是否有可能导致问题的任何现有目录

我一直在搜索互联网和我的日志文件以寻求答案......任何提供的帮助都会非常感激....

更新

好的......所以我将/ 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?

2 个答案:

答案 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