我正在尝试更改Spark暂存目录以防止在工作程序反分解时丢失数据(在带有Spark 2.4的google dataproc上)。
我想将HDFS登台切换为Google Cloud Storage登台。
当我运行此命令时:
spark-submit --conf "spark.yarn.stagingDir=gs://my-bucket/my-staging/" gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py
我有这个错误:
org.apache.spark.SparkException:应用程序application_1560413919313_0056失败2次,原因是退出了appattempt_1560413919313_0056_000002的AM容器,退出代码为-1000
诊断失败:[2019-06-20 07:58:04.462]找不到文件:gs:/my-staging/.sparkStaging/application_1560413919313_0056/pyspark.zip
java.io.FileNotFoundException:找不到文件:gs:/my-staging/.sparkStaging/application_1560413919313_0056/pyspark.zip
Spark作业失败,但是在GCS上创建了
.sparkStaging/
目录。对这个问题有什么想法吗?
谢谢。
最佳答案
首先,重要的是要认识到,登台目录主要用于执行程序(主要是jar和其他归档文件)的登台工件,而不是用于在作业执行时存储中间数据。如果您想在工人退役后(例如在机器preemption或按比例缩小之后)保留中间作业数据(主要是随机数据),那么Dataproc Enhanced Flexibility Mode(当前为alpha)可能会为您提供帮助。
您的命令对Dataproc映像版本1.3和1.4都适用。确保您的目标登台存储桶存在,并且Dataproc群集(即该群集作为其运行的service account)具有对该存储桶的读写访问权限。请注意,GCS connector不会为您创建存储桶。
关于apache-spark - 将GCS登台目录用于Spark作业(在Dataproc上),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56681705/