使用master yarn和deploy-mode cluster的`spark.yarn.stagingDir`为什么spark-submit失败

时间:2017-10-05 18:09:57

标签: scala apache-spark apache-spark-sql

我遇到了一个场景,当我提供spark.yarn.stagingDir火花 - 提交它开始失败并且它没有提供关于根本原因的任何线索,我花了很长时间才弄清楚它是什么' s因为spark.yarn.stagingDir参数。当提供spark.yarn.stagingDir此参数时,为什么spark-submit失败?

查看相关问题here了解详情

失败的命令:

spark-submit \
--conf "spark.yarn.stagingDir=/xyz/warehouse/spark" \
--queue xyz \
--class com.xyz.TestJob \
--master yarn \
--deploy-mode cluster \
--conf "spark.local.dir=/xyz/warehouse/tmp" \
/xyzpath/java-test-1.0-SNAPSHOT.jar

当我删除spark.yarn.stagingDir时,它开始工作:

spark-submit \
    --queue xyz \
    --class com.xyz.TestJob \
    --master yarn \
    --deploy-mode cluster \
    --conf "spark.local.dir=/xyz/warehouse/tmp" \
    /xyzpath/java-test-1.0-SNAPSHOT.jar

异常堆栈跟踪:

  

应用程序application_1506717704791_145448失败了   状态           在org.apache.spark.deploy.yarn.Client.run(Client.scala:1167)           在org.apache.spark.deploy.yarn.Client $ .main(Client.scala:1213)           在org.apache.spark.deploy.yarn.Client.main(Client.scala)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)           at java.lang.reflect.Method.invoke(Method.java:498)           在org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:738)

1 个答案:

答案 0 :(得分:1)

当我将spark.yarn.stagingDir设置为/tmp时,我遇到了完全相同的问题(当我删除了这个非常配置的条目后,它工作得很好)。

我的解决方案是指定完整的HDFS路径,例如hdfs://hdfs_server_name/tmp,而不仅仅是/tmp。希望它对您有用。