我正在尝试更改 Spark 暂存目录以防止在 worker decommisionning 时丢失数据(在带有 Spark 2.4 的谷歌 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 次,原因是 AM 容器退出appattempt_1560413919313_0056_000002退出代码:-1000
此尝试失败。诊断: [2019-06-20 07:58:04.462]找不到文件: gs:/my-stageaging/.sparkStaging/application_1560413919313_0056/pyspark.zip java.io.FileNotFoundException: 找不到文件: gs:/my-staging/.sparkStaging/application_1560413919313_0056/pyspark.zip
Spark 作业失败,但在 GCS 上创建了.sparkStaging/
目录。
对这个问题有任何想法吗?
谢谢。
首先,重要的是要认识到暂存目录主要用于暂存执行程序(主要是 jar 和其他存档(的工件,而不是用于在作业执行时存储中间数据。如果您想在工作人员退役后(例如,在机器抢占或缩减之后(保留中间作业数据(主要是随机数据(,那么 Dataproc 增强灵活性模式(目前为 alpha 版(可能会为您提供帮助。
您的命令在 Dataproc 映像版本 1.3 和 1.4 上都对我有用。确保您的目标暂存存储桶存在,并且 Dataproc 集群(即运行集群的服务账户(对该存储桶具有读写访问权限。请注意,GCS 连接器不会为您创建存储桶。