Oozie 5.2.0启动Spark应用报错“不支持Spark动作”,求解决方案
Oozie 5.2.0 运行Spark 3.0.0应用报错解决方案
一、报错核心原因
报错Action of type spark is not supported说明Oozie服务器未加载Spark动作执行器。Spark动作是Oozie的插件式功能,默认可能未启用或配置存在问题。
二、能否将Spark应用作为Java动作启动?
可以,但不推荐。Spark应用依赖Spark集群配置、类路径管理等复杂逻辑,用Java动作启动需要手动处理spark-submit命令、所有依赖包、环境变量等,不仅维护成本极高,还容易引发类冲突、资源不足等问题。优先推荐修复Oozie的Spark动作支持,而非改用Java动作。
三、修复Spark动作支持的操作步骤
1. 检查并安装Spark动作插件
查看Oozie本地共享库目录$OOZIE_HOME/share/lib/oozie,确认是否存在oozie-spark-action-*.jar文件。若缺失,需补充与Oozie 5.2.0版本匹配的Spark动作插件包。
2. 启用Spark动作执行器配置
修改Oozie配置文件oozie-site.xml,添加或更新以下配置:
<property> <name>oozie.action.executor.ext.classes</name> <value>org.apache.oozie.action.hadoop.SparkActionExecutor</value> </property>
若已有其他动作执行器,用逗号分隔追加即可。
3. 同步Oozie共享库到HDFS
将Spark 3.0.0相关依赖包(含Spark核心jar、Scala库等)上传至HDFS的Oozie共享库目录(通常为/user/oozie/share/lib/lib_<timestamp>/spark),然后执行同步命令:
oozie admin -oozie http://<oozie-server>:11000/oozie -sharelibupdate
确保共享库中Spark版本与业务使用的3.0.0完全兼容。
4. 修正Workflow配置细节
你的workflow.xml存在参数配置错误,修正后的配置示例如下:
<workflow-app name="KafkaUnload_Maspers" xmlns="uri:oozie:workflow:0.5"> <global> <configuration> <property> <name>mapred.job.queue.name</name> <value>${yarn_queue}</value> </property> <property> <name>oozie.action.max.output.data</name> <value>102400000</value> </property> </configuration> </global> <start to="runDataMartStreaming"/> <action name="runDataMartStreaming"> <spark xmlns="uri:oozie:spark-action:1.0"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>spark.sql.shuffle.partitions</name> <value>100</value> </property> <!-- 配置Kerberos认证参数 --> <property> <name>spark.yarn.principal</name> <value>u_sklsdprozn_s_custom_rozn_productshelf@DEV.DF.SBRF.RU</value> </property> <property> <name>spark.yarn.keytab</name> <value>s_custom.keytab</value> </property> </configuration> <master>yarn</master> <mode>client</mode> <name>Spark Example</name> <class>ru.kafkaconnector.Main</class> <jar>kafka-connector-init-0.0.0-jar-with-dependencies.jar</jar> <spark-opts> -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false --queue ${yarn_queue} --jars spark-sql-kafka-0-10_2.12-3.0.0.jar,kafka-clients-3.0.0.jar --files /etc/krb5.conf,s_custom.keytab </spark-opts> <!-- 以下为业务需要的文件依赖 --> <file>${wf:appPath()}/lib/kafka-connector-init-0.0.0-jar-with-dependencies.jar</file> <file>${wf:appPath()}/lib/spark-sql-kafka-0-10_2.12-3.0.0.jar</file> <file>${wf:appPath()}/lib/kafka-clients-3.0.0.jar</file> <file>${wf:appPath()}/s_custom.keytab</file> <file>/etc/krb5.conf</file> </spark> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end"/> </workflow-app>
关键修正点:
- 补充
<ok>、<error>分支,完善workflow的执行逻辑 - 将
--jar、--keytab等spark-submit参数移至<spark-opts>,<arg>仅用于传递给业务主类的参数 - 添加Kerberos相关配置到Spark的configuration中
- 确保所有依赖文件(如keytab)都通过
<file>标签声明
5. 重启Oozie服务
完成上述配置后,重启Oozie服务器,确保所有配置和插件加载生效。
内容的提问来源于stack exchange,提问作者Nikasyauskas
相关产品推荐
相关产品推荐

