【问题标题】:How to fix 'java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object'如何修复'java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object'
【发布时间】:2020-02-15 13:00:17
【问题描述】:

所以我开始编写自己的 Oozie 工作流,其中包含 Apache Spark 操作,问题是即使我清楚地使用 Scala 2.11.8 和 Spark 2.3.0 对源代码进行了 sbt 打包,纱线说

java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;

有一个包含 Hortonworks HDP Sandbox 的 docker 容器在 ec2 机器上运行,该机器具有 16 核 cpu 和 41 gigs 内存。我已经使用命令行更新了 Oozie 共享库。下面是我的 job.properties 文件和 workflow.xml 文件。

job.properties

jobTracker=sandbox-hdp.hortonworks.com:8032
master=yarn-cluster
oozie.action.sharelib.for.spark=spark2
oozie.action.sharelib.for.spark.exclusion=oozie/jackson
# Time and schedule details
start_date=2015-01-01T00:00Z
end_date=2015-06-30T00:00Z
frequency=55 23 L * ?
nameNode=hdfs://sandbox-hdp.hortonworks.com:8020
# Workflow to run
wf_application_path=hdfs://sandbox-hdp.hortonworks.com:8020/user/hue/learn_oozie/ch08/spark_rainfall
# Coordinator to run
oozie.coord.application.path=hdfs://sandbox-hdp.hortonworks.com:8020/user/hue/learn_oozie/ch08/spark_rainfall
# Datasets
data_definitions=hdfs://sandbox-hdp.hortonworks.com:8020/user/hue/learn_oozie/ch08/datasets/datasets.xml
# Controls
timeout=10
concurrency_level=1
execution_order=FIFO
materialization_throttle=1

工作流.xml

<workflow-app name="ch08_spark_max_rainfall" xmlns="uri:oozie:workflow:0.5">

    <start to="max_rainfall"/>

    <action name="max_rainfall">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <master>${master}</master>
            <name>"Spark Ch08 Max Rain Calculator"</name>
            <class>life.jugnu.learnoozie.ch08.MaxRainfall</class>
            <jar>hdfs://sandbox-hdp.hortonworks.com:8020/user/hue/learn_oozie/ch08/rainbow/target/scala-2.11/rainbow_2.11-1.0.14.jar</jar>
            <spark-opts>
                --conf spark.yarn.historyServer.address=http://sandbox-hdp.hortonworks.com:18088
                --conf spark.eventLog.dir=hdfs://sandbox-hdp.hortonworks.com:8020/user/spark/applicationHistory
                --conf spark.eventLog.enabled=true
            </spark-opts>
            <arg>${input}</arg>
            <arg>${output}</arg>
        </spark>
        <ok to="End"/>
        <error to="Kill"/>
    </action>

    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>

    <end name="End"/>
</workflow-app>

我希望这个工作流运行没有任何问题,并将结果写入远程集群中的 HDFS,但是 spark 操作被终止并出现以下错误消息。

线程“main”中的异常 java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object; 在 org.apache.spark.deploy.yarn.ApplicationMasterArguments.parseArgs(ApplicationMasterArguments.scala:45) 在 org.apache.spark.deploy.yarn.ApplicationMasterArguments.(ApplicationMasterArguments.scala:34) 在 org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:576) 在 org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)

【问题讨论】:

  • 根据我的经验,让 Spark 操作在 Oozie 中工作是一个调试练习。我将首先在您的属性中设置 oozie.use.system.libpath=true,如果您的 sharelib 路径是非默认路径(默认类似于 /user/oozie/share/lib/),则设置 oozie.libpath

标签: apache-spark hadoop-yarn oozie


【解决方案1】:

我也有同样的问题。这是因为我们在集群上使用了 4.1.0 版的 Oozie。 Spark 操作仅适用于 4.2.0+。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多