Oozie Shell Action执行Hive脚本失败,状态为KILLED求助
Oozie Shell Action执行Hive脚本时作业被KILLED的排查方向
我之前在Cloudera环境里也碰到过类似的问题,结合你的配置和现象,给你梳理几个关键的排查点:
问题回顾
在Cloudera QuickStart虚拟机中,Oozie Shell Action执行简单HDFS命令脚本正常,但触发包含Hive命令的脚本时,Oozie作业状态变为KILLED,控制台仅返回:
"Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]"
而NameNode历史服务器显示底层作业为SUCCEEDED。
你的配置详情如下:
workflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.5" name="WorkFlow1"> <start to="shell-node" /> <action name="shell-node"> <shell xmlns="uri:oozie:shell-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <exec>${myscript}</exec> <file>${myscriptpath}#${myscript}</file> <capture-output/> </shell> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>Workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}] </message> </kill> <end name="end" /> </workflow-app>
job.properties
nameNode=hdfs://quickstart.cloudera:8020 jobTracker=hdfs://quickstart.cloudera:8032 queueName=default myscript=test.sh myscriptpath=${nameNode}/oozie/sl/test.sh oozie.use.system.libpath=true oozie.wf.application.path=${nameNode}/oozie/sl/ workflowAppUri=${nameNode}/oozie/sl/
test.sh
hive -e "create table test2 as select * from test"
排查方向
- 查看Shell Action的详细执行日志:Oozie返回的exit code 1只是表面现象,关键要看
test.sh执行时的标准错误输出。在Oozie控制台找到对应的作业,进入Logs页面,定位到shell-node的日志,查找stderr部分,这里会显示Hive命令执行时的具体报错(比如找不到Hive命令、元数据访问权限不足等)。 - 验证Oozie容器中的Hive环境:Oozie的Shell Action运行在YARN容器中,环境变量可能和你在虚拟机终端里的不一样。可以修改
test.sh,在Hive命令前加上:
执行后查看日志,确认Hive命令的路径是否正确,环境变量是否配置到位。echo "Current PATH: $PATH" echo "HIVE_HOME: $HIVE_HOME" which hive - 检查执行用户的权限:Oozie作业默认以
oozie用户执行,你可以在虚拟机中切换到该用户,手动执行hive -e "create table test2 as select * from test",看是否能成功。如果失败,大概率是该用户没有Hive元数据的访问权限,或者HDFS上的表路径权限不足。 - 开启脚本调试模式:在
test.sh开头加上set -x,这样脚本的每一步执行都会输出到日志,能清晰看到哪一步导致了非0退出码。同时在Hive命令后加上echo "Hive exit code: $?",确认Hive本身是否真的执行成功。 - 确认Oozie系统库依赖:虽然你设置了
oozie.use.system.libpath=true,但要确保Oozie的系统库目录包含Hive相关的依赖jar包。可以通过Cloudera Manager查看Oozie的配置,检查oozie.system.libpath指向的目录是否有Hive的jar文件,缺失依赖可能导致Hive执行异常。
内容的提问来源于stack exchange,提问作者PPPP
相关产品推荐
相关产品推荐

