Oozie Spark2 Action引发“试图向分布式缓存多次添加({dependencyJar})。”

时间:2019-06-12 12:28:31

标签: apache-spark oozie oozie-workflow

在尝试为oozie spark2操作加载依赖项jar时遇到以下错误。在下面添加了workflow.xml。

错误:

  

2019-06-12 07:00:35,140警告SparkActionExecutor:523-   SERVER [manager-0] USER [root] GROUP [-]令牌[] APP [spark-wf]   作业[0000068-190611183932696-oozie-root-W]   ACTION [0000068-190611183932696-oozie-root-W @ spark-node]启动器   错误,原因:主类[org.apache.oozie.action.hadoop.SparkMain],   main()抛出异常,   尝试添加(hdfs:// $ {nameNode} / $ {workflowAppUri} / lib / $ {dependencyJar})   多次访问分布式缓存。

workflow.xml

<workflow-app xmlns="uri:oozie:workflow:0.3" name="spark-wf">
    <start to="spark-node"/>
    <action name="spark-node">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <master>yarn-cluster</master>
            <name>test_spark</name>
            <class>${className}</class>
            <jar>${workflowAppUri}/lib/${executableJar}</jar>
            <spark-opts>--jars ${workflowAppUri}/lib/${dependencyJar}</spark-opts>
            <arg>${arg1}</arg>
            <arg>${arg2}</arg>
        </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>

与oozie和spark2 sharelib目录中的重复jar相关的问题不同。删除了spark2 sharelib中重复的jar。但这无济于事。

这可能是什么原因? 请帮我解决这个问题!

1 个答案:

答案 0 :(得分:0)

如果我们在应用程序根目录的lib目录中添加jar,那么oozie会自动将jar分发到它的分布式缓存中。就我而言,我试图添加已经在lib目录中的jar。因此,我只需要从工作流程定义中删除以下行即可。

<spark-opts>--jars ${workflowAppUri}/lib/${dependencyJar}</spark-opts>

我也测试过,如果您要附加lib目录中不可用的jar,可以在工作流定义中像下面这样提及。

<spark-opts>--jars ${nameNode}/tmp/{someJar}</spark-opts>