Spark on yarn jar上传问题

我正在尝试使用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_0007_000002退出,退出时使用exitCode:-1000,原因是:资源hdfs:// kc1ltcld29:9000 / user / myuser / .sparkStaging / application_1434177111261_0007 / spark-assembly-1.4.0-hadoop2。在src文件系统上更改了4.0.jar(预计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由于AM容器导致appattempt_1434177111261_0008_000002退出,失败了2次,因为:文件不存在: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”中的exceptionorg.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)在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)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并重新提交,但这没有帮助。

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

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

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

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