Cha*_*aos 2 hadoop hive mapreduce oozie
我正试图通过Oozie进行蜂巢动作.我的workflow.xml情况如下:
<workflow-app name='edu-apollogrp-dfe' xmlns="uri:oozie:workflow:0.1">
<start to="HiveEvent"/>
<action name="HiveEvent">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>oozie.hive.defaults</name>
<value>${hiveConfigDefaultXml}</value>
</property>
</configuration>
<script>${hiveQuery}</script>
<param>OUTPUT=${StagingDir}</param>
</hive>
<ok to="end"/>
<error to="end"/>
</action>
<kill name='kill'>
<message>Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name='end'/>
Run Code Online (Sandbox Code Playgroud)
这是我的job.properties文件:
oozie.wf.application.path=${nameNode}/user/${user.name}/hiveQuery
oozie.libpath=${nameNode}/user/${user.name}/hiveQuery/lib
queueName=interactive
#QA
nameNode=hdfs://hdfs.bravo.hadoop.apollogrp.edu
jobTracker=mapred.bravo.hadoop.apollogrp.edu:8021
# Hive
hiveConfigDefaultXml=/etc/hive/conf/hive-default.xml
hiveQuery=hiveQuery.hql
StagingDir=${nameNode}/user/${user.name}/hiveQuery/Output
Run Code Online (Sandbox Code Playgroud)
当我运行此工作流程时,我最终得到此错误:
ACTION[0126944-130726213131121-oozie-oozi-W@HiveEvent] Launcher exception: org/apache/hadoop/hive/cli/CliDriver
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/cli/CliDriver
Run Code Online (Sandbox Code Playgroud)
Error Code: JA018
Error Message: org/apache/hadoop/hive/cli/CliDriver
我不确定这个错误意味着什么.我哪里错了?
编辑
此链接说错误代码JA018是:JA018 is output directory exists error in workflow map-reduce action.但在我的情况下,输出目录不存在.这使得它更加令人困惑
我弄清楚出了什么问题!
该类org/apache/hadoop/hive/cli/CliDriver是执行Hive Action所必需的.从错误消息中可以明显看出这一点.这个类在这个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群集上配置目录的位置).
这摆脱了错误!