Spark on yarn jar上传问题

时间:2015-06-17 14:07:05

标签: java hadoop mapreduce apache-spark

我正在尝试使用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 /用户/为myuser / .sparkStaging / application_1434177111261_0007 /火花组装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_0008_000002已退出   使用exitCode:-1000由于:文件不存在:   HDFS:// kc1ltcld29:9000 /用户/为myuser / .sparkStaging / application_1434177111261_0008 /火花组装1.4.0-hadoop2.4.0.jar   这次尝试失败了。申请失败了。            ApplicationMaster主机:N / A.            ApplicationMaster RPC端口:-1            queue:root.myuser            开始时间:1434549879649            最终状态:失败            跟踪网址:http://kc1ltcld29:8088/cluster/app/application_1434177111261_0008            user:myuser线程中的异常" main" 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)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)           at 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 /火花2aca3f35-abf1-4e21-a10e-4778a039d0f4

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

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