【问题标题】:Spark on yarn jar upload problemsSpark on yarn jar 上传问题
【发布时间】:2021-12-06 14:31:56
【问题描述】:

我正在尝试使用 spark over yarn(CentOS 上的 Cloudera Hadoop 5.2)运行一个简单的 Map/Reduce java 程序。我试过这两种不同的方法。第一种方式如下:

YARN_CONF_DIR=/usr/lib/hadoop-yarn/etc/hadoop/; 
/var/tmp/spark/spark-1.4.0-bin-hadoop2.4/bin/spark-submit --class MRContainer --master yarn-cluster --jars /var/tmp/spark/spark-1.4.0-bin-hadoop2.4/lib/spark-assembly-1.4.0-hadoop2.4.0.jar  simplemr.jar

这个方法报错:

诊断:应用程序 application_1434177111261_0007 失败 2 次 由于 appattempt_1434177111261_0007_000002 的 AM 容器已退出 退出代码:-1000 由于:资源 hdfs://kc1ltcld29:9000/user/myuser/.sparkStaging/application_1434177111261_0007/spark-assembly-1.4.0-hadoop2.4.0.jar 在 src 文件系统上更改(预期为 1434549639128,为 1434549642191

然后我尝试不使用 --jars:

YARN_CONF_DIR=/usr/lib/hadoop-yarn/etc/hadoop/; 
/var/tmp/spark/spark-1.4.0-bin-hadoop2.4/bin/spark-submit --class MRContainer --master yarn-cluster simplemr.jar

诊断:应用程序 application_1434177111261_0008 失败 2 次 由于 appattempt_1434177111261_0008_000002 的 AM 容器已退出 退出代码:-1000 由于:文件不存在: hdfs://kc1ltcld29:9000/user/myuser/.sparkStaging/application_1434177111261_0008/spark-assembly-1.4.0-hadoop2.4.0.jar .这次尝试失败..申请失败。 ApplicationMaster 主机:不适用 ApplicationMaster RPC 端口:-1 队列:root.myuser 开始时间:1434549879649 最终状态:失败 追踪网址:http://kc1ltcld29:8088/cluster/app/application_1434177111261_0008 用户:myuser 线程“主”org.apache.spark.SparkException 中的异常:应用程序 application_1434177111261_0008 以失败状态完成 在 org.apache.spark.deploy.yarn.Client.run(Client.scala:841) 在 org.apache.spark.deploy.yarn.Client$.main(Client.scala:867) 在 org.apache.spark.deploy.yarn.Client.main(Client.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:664) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:169) 在 org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:192) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:111) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 15/06/17 10:04:57 INFO util.Utils:称为 15/06/17 的关闭挂钩 10:04:57 INFO util.Utils:删除目录 /tmp/spark-2aca3f35-abf1-4e21-a10e-4778a039d0f4

我尝试从 hdfs://users//.sparkStaging 中删除所有 .jars 并重新提交,但这没有帮助。

【问题讨论】:

    标签: java hadoop mapreduce apache-spark


    【解决方案1】:

    通过将 spark-assembly.jar 复制到每个节点的 hdfs 上的目录中,然后将其作为参数传递给 spark-submit --conf spark.yarn.jar 来解决问题。命令如下:

    hdfs dfs -copyFromLocal /var/tmp/spark/spark-1.4.0-bin-hadoop2.4/lib/spark-assembly-1.4.0-hadoop2.4.0.jar /user/spark/spark-assembly.jar 
    
    /var/tmp/spark/spark-1.4.0-bin-hadoop2.4/bin/spark-submit --class MRContainer --master yarn-cluster  --conf spark.yarn.jar=hdfs:///user/spark/spark-assembly.jar simplemr.jar
    

    【讨论】:

      【解决方案2】:

      如果您收到此错误,则表示您正在使用 --jars 选项上传程序集 jar 或手动复制到每个节点中的 hdfs。 我遵循了这种方法,它对我有用。

      在yarn-cluster模式下,Spark submit自动将程序集jar上传到分布式缓存中,所有执行器容器都从该缓存中读取,因此无需手动将程序集jar复制到所有节点(或通过--jars)。 您的 HDFS 中似乎有两个版本的同一个 jar。

      尝试从 .sparkStaging 目录中删除所有旧 jar,然后重试,它应该可以工作。

      【讨论】:

        猜你喜欢
        • 2015-04-05
        • 2019-07-25
        • 2017-10-31
        • 1970-01-01
        • 2016-01-14
        • 2014-09-14
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        相关资源
        最近更新 更多