我目前正在设置一个使用Spark动作的Oozie工作流程。我使用的Spark代码工作正常,在本地和YARN上都进行了测试。但是,当它作为Oozie工作流运行时,我收到以下错误:
Main class [org.apache.oozie.action.hadoop.SparkMain], exit code [1]
在阅读了这个错误后,我发现最常见的原因是Oozie sharelibs存在问题。我已将所有Spark jar文件添加到hdfs上的Oozie / user / oozie / share / lib / spark,重新启动Oozie并运行sudo -u oozie oozie admin -oozie http://192.168.26.130:11000/oozie -sharelibupdate
以确保正确更新sharelib。不幸的是,这一切都没有阻止发生错误。
我的工作流程如下:
<workflow-app xmlns='uri:oozie:workflow:0.4' name='SparkBulkLoad'>
<start to = 'bulk-load-node'/>
<action name = 'bulk-load-node'>
<spark xmlns="uri:oozie:spark-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<master>yarn</master>
<mode>client</mode>
<name>BulkLoader</name>
<jar>${nameNode}/user/spark-test/BulkLoader.py</jar>
<spark-opts>
--num-executors 3 --executor-cores 1 --executor-memory 512m --driver-memory 512m\
</spark-opts>
</spark>
<ok to = 'end'/>
<error to = 'fail'/>
</action>
<kill name = 'fail'>
<message>
Error occurred while bulk loading files
</message>
</kill>
<end name = 'end'/>
</workflow-app>
和job.properties如下:
nameNode=hdfs://192.168.26.130:8020
jobTracker=http://192.168.26.130:8050
queueName=spark
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/spark-test/workflow.xml
workflowAppUri=${nameNode}/user/spark-test/BulkLoader.py
非常感谢任何建议。
答案 0 :(得分:1)
我还指定了libpath
oozie.libpath=<path>/oozie/share/lib/lib_<timestamp>
这是您在编写命令后看到的值
sudo -u oozie oozie admin -oozie http://192.168.26.130:11000/oozie -sharelibupdate
示例:
[ShareLib update status]
sharelibDirOld = hdfs://nameservice1/user/oozie/share/lib/lib_20190328034943
host = http://vghd08hr.dc-ratingen.de:11000/oozie
sharelibDirNew = hdfs://nameservice1/user/oozie/share/lib/lib_20190328034943
status = Successful
可选: 您还可以在Cloudera文件夹中指定纱线配置:
oozie.launcher.yarn.app.mapreduce.am.env=/opt/SP/apps/cloudera/parcels/SPARK2-2.2.0.cloudera4-1.cdh5.13.3.p0.603055/lib/spark2
但 这可能无法解决问题。我的另一个提示是,如果您使用的是Spark 1.x,则此文件夹在您的oozie sharelib文件夹中是必需的
/user/oozie/share/lib/lib_20190328034943/spark2/oozie-sharelib-spark.jar
如果将其复制到spark2文件夹中,则可以解决“缺少SparkMain”的问题,但需要其他依赖项(这在我的环境中可能是个问题)。我认为值得尝试,因此请复制并粘贴该lib,运行您的工作,然后查看日志。