当我使用 oozie od CDH 4.1.1 运行一个 hive 脚本时
运行失败,并显示:
Error Code JA018
Error Message org/apache/hadoop/hive/cli/CliDriver
Details
Property Value
External Id job_201211281608_0112
External Status FAILED/KILLED
Data None
Start time Sat, 01 Dec 2012 03:02:37
End time Sat, 01 Dec 2012 03:03:07
Id 0000007-121128160850795-oozie-oozi-W@ExchangeRateTest
Retries 0
TrackerUri overlord-datanode1:8021
Transition kill
谷歌搜索JA018只显示一个神秘的提示:JA018是输出目录在工作流map-reduce操作中存在错误。
我将我的HIV站点.xml复制到HDFS并在工作流程中设置.xml:oozie.hive.defaults/user/hue/oozie/workspaces/overlord-oozie-1/hive-site.xml
以下是完整的工作流程.xml:
<workflow-app name="HiveTest" xmlns="uri:oozie:workflow:0.4">
<start to="ExchangeRateTest"/>
<action name="ExchangeRateTest">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}${jobOutput}"/>
</prepare>
<configuration>
<property>
<name>oozie.use.system.libpath</name>
<value>true</value>
</property>
<property>
<name>oozie.hive.defaults</name>
<value>/user/hue/oozie/workspaces/_overlord_-oozie-1/hive-site.xml</value>
</property>
</configuration>
<script>/user/hue/oozie/workspaces/_overlord_-oozie-1/03_update_exchange_rates_final.hive</script>
<param>OUTPUT=${jobOutput}</param>
</hive>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
如何使它起作用?
Hive 操作需要类org/apache/hadoop/hive/cli/CliDriver
。从错误消息中可以明显看出这一点。此类位于此 jar 文件中:hive-cli-0.7.1-cdh3u5.jar
.(在我的情况下,我的 cloudera 版本中的 cdh3u5)。
Oozie 在 ShareLib
目录中检查这个 jar。这个目录的位置通常配置在hive-site.xml
,属性名称为oozie.service.WorkflowAppService.system.libpath
,所以Oozie应该很容易找到jar。
但就我而言,hive-site.xml
不包括此属性,因此 Oozie 不知道在哪里寻找这个罐子,因此java.lang.NoClassDefFoundError
.
为了解决这个问题,我必须在我的job.properties文件中包含一个参数,以将oozie指向ShareLib
目录的位置,如下所示: oozie.libpath=${nameNode}/user/oozie/share/lib
.(取决于SharedLib
目录在群集上的配置位置)。