我正在尝试使用spark over yarn(CentOS上的Cloudera Hadoop 5.2)运行一个简单的Map/ReduceJava程序。我已经尝试了这两种不同的方法。第一种方法如下:
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退出 使用退出代码:-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_0008_000002退出 使用退出代码:-1000,原因是:文件不存在: hdfs://kc1ltcld29:9000/user/myuser/.sparkStaging/application_1434177111261_0008/spark-assembly-1.4.0-hadoop2.4.0.jar .此尝试失败..应用程序失败。 应用程序主主机:不适用 应用程序主 RPC 端口:-1 队列:root.myuser 开始时间:1434549879649 最终状态:失败 跟踪网址:http://kc1ltcld29:8088/cluster/app/application_1434177111261_0008 user: myuser 线程 "main" 中的异常 org.apache.spark.SparkException: Application application_1434177111261_0008已完成失败状态 at org.apache.spark.deploy.yarn.Client.run(Client.scala:841) at org.apache.spark.deploy.yarn.Client$.main(Client.scala:867) at 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) at java.lang.reflect.Method.invoke(Method.java:601) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:664) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:169) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:192) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:111) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 15/06/17 10:04:57 INFO util.实用工具:关机钩称为 15/06/17 10:04:57 信息利用。实用程序:删除目录 /tmp/spark-2ACA3F35-ABF1-4E21-A10E-4778A039D0F4
我尝试从 hdfs://users//.sparkStaging 中删除所有 .jar 并重新提交,但这没有帮助。
通过将 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
选项上传程序集jar或手动复制到每个节点中的hdfs。我遵循了这种方法,它对我有用。
在 yarn-cluster 模式下,Spark submit 会自动将程序集 jar 上传到所有执行器容器从中读取的分布式缓存中,因此无需手动将程序集 jar 复制到所有节点(或通过 --jars
传递)。您的 HDFS 中似乎有两个版本的同一个罐子。
尝试从 .sparkStaging 目录中删除所有旧 jar,然后重试,它应该可以工作。