首页 文章

Spark on yarn jar上传问题

提问于
浏览
3

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

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次由于AM容器的appattempt_1434177111261{000002退出,退出时使用exitCode:-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次,因为AM容器的appattempt_1434177111261}000002退出,退出时使用exitCode:-1000,原因是:文件不存在:hdfs:// kc1ltcld29:9000 / user / myuser / .sparkStaging / application_1434177111261_0008 / spark-assembly-1.4 .0-hadoop2.4.0.jar . 试图这个尝试..申请失败 . ApplicationMaster主机:N / A ApplicationMaster RPC端口:-1队列:root.myuser开始时间:1434549879649最终状态:FAILED跟踪URL:http:// kc1ltcld29:8088 / cluster / app / application_1434177111261_0008 user:myuser线程“main”中的异常org.apache.spark.SparkException:应用程序application_1434177111261_0008在org.apache.spark.deploy.yarn.yarn.Client $ .main的org.apache.spark.deploy.yarn.Client.run(Client.scala:841)中以失败状态结束(Client.scala:867)atg.apache.spark.deploy.yarn.Client.main(Client.scala)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java) :57)atg.apache.spark.deploy.SparkSubmit $ .org $ apache中的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601) $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:664)org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:169)a在org.apache.spark.deploy.SparkSubmit的org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:192)org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:111) .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并重新提交,但这没有帮助 .

2 回答

  • 2

    通过将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
    
  • 3

    如果您收到此错误,则表示您使用--jars选项上载装配 jar 或手动复制到每个节点中的hdfs . 我遵循这种方法,它适用于我 .

    在纱线群集模式下,Spark提交 automatically uploads the assembly jar to a distributed cache that all executor containers 读取,因此无需手动将程序集jar复制到所有节点(或通过--jars传递) . 似乎你的HDFS中有两个版本的同一个jar .

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

相关问题