我正在尝试使用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并重新提交,但这并没有帮助。
答案 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并重试,它应该可以正常工作。