apache-spark - 由于 java.io.FileNotFoundException :/hadoop/yarn/nm-local-dir/usercache/root/appcache/,Google Dataproc 上的 Spark 失败

标签 apache-spark hadoop google-cloud-storage google-cloud-dataproc

几个月来,我一直在通过 Zeppelin 和 Dataproc 控制台在 Dataproc 上使用 Spark/Hadoop,但最近我遇到了以下错误。

Caused by: java.io.FileNotFoundException: /hadoop/yarn/nm-local-dir/usercache/root/appcache/application_1530998908050_0001/blockmgr-9d6a2308-0d52-40f5-8ef3-0abce2083a9c/21/temp_shuffle_3f65e1ca-ba48-4cb0-a2ae-7a81dcdcf466 (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at org.apache.spark.storage.DiskBlockObjectWriter.initialize(DiskBlockObjectWriter.scala:103)
at org.apache.spark.storage.DiskBlockObjectWriter.open(DiskBlockObjectWriter.scala:116)
at org.apache.spark.storage.DiskBlockObjectWriter.write(DiskBlockObjectWriter.scala:237)
at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:151)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
at org.apache.spark.scheduler.Task.run(Task.scala:108)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

首先,我在 Zeppelin notebook 上遇到了这种类型的错误,并认为这是 Zeppelin 的问题。但是,此错误似乎是随机发生的。我怀疑这与其中一位无法在该路径中写入的 Spark 工作人员有关。因此,我用谷歌搜索并被建议删除每个 Spark worker 上/hadoop/yarn/nm-local-dir/usercache/下的文件,并检查每个 worker 上是否有可用磁盘空间。这样做之后,我仍然有时会出现此错误。我也在Dataproc上运行了一个Spark作业,也出现了类似的错误。我使用的是 Dataproc 镜像版本 1.2。

谢谢

Peeranat F.

最佳答案

好的。我们在 GCP 上遇到了同样的问题,原因是资源抢占。

在GCP中,资源抢占可以通过以下两种策略来实现,

  1. 节点抢占——移除集群中的节点并替换它们
  2. 容器抢占 - 移除 yarn 容器。

此设置由您的管理员/开发运营人员在 GCP 中完成,以优化集群的成本和资源利用率,特别是在共享集群时。

你的堆栈跟踪告诉我的是它的节点抢占。此错误是随机发生的,因为有时被抢占的节点是导致应用程序一起失败的驱动程序节点。

您可以在 GCP 控制台中查看哪些节点是可抢占的。

关于apache-spark - 由于 java.io.FileNotFoundException :/hadoop/yarn/nm-local-dir/usercache/root/appcache/,Google Dataproc 上的 Spark 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51229580/

相关文章:

scala - 使用 Spark 访问数据框中的列

apache-spark - Hive 数据库仅列出默认数据库

google-app-engine - AppEngine & BigQuery - 你会将统计/监控数据放在哪里?

python - 将大表的一部分读取到 AWS GLUE 的最佳方法

apache-spark - 如何使用相同的 spark 上下文并行运行多个 spark 作业?

java - 为Hadoop设置我的JAVA_HOME变量

hadoop - HBase分布式模式

hadoop - JPS没有显示hbase或hadoop?

python-3.x - Cloud Storage python客户端无法检索存储桶

javascript - 使用 Json api 下载 Google 存储媒体