You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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命令前加上:
    echo "Current PATH: $PATH"
    echo "HIVE_HOME: $HIVE_HOME"
    which hive
    
    执行后查看日志,确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:58:14