首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Spark作业失败,org.apache.spark.shuffle.MetadataFetchFailedException:在猜测模式下缺少shuffle 0的输出位置?

为什么Spark作业失败,org.apache.spark.shuffle.MetadataFetchFailedException:在猜测模式下缺少shuffle 0的输出位置?
EN

Stack Overflow用户
提问于 2015-03-06 22:40:32
回答 9查看 96K关注 0票数 103

我在投机模式下运行Spark作业。我有大约500个任务和大约500个文件的1 GB gz压缩。我一直在每个作业中,对于1-2个任务,附加的错误在之后重新运行几十次(阻止作业完成)。

org.apache.spark.shuffle.MetadataFetchFailedException:缺少随机播放0的输出位置

你知道这个问题的意义是什么吗?如何克服它?

org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 0
    at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$1.apply(MapOutputTracker.scala:384)
    at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$1.apply(MapOutputTracker.scala:381)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108)
    at org.apache.spark.MapOutputTracker$.org$apache$spark$MapOutputTracker$$convertMapStatuses(MapOutputTracker.scala:380)
    at org.apache.spark.MapOutputTracker.getServerStatuses(MapOutputTracker.scala:176)
    at org.apache.spark.shuffle.hash.BlockStoreShuffleFetcher$.fetch(BlockStoreShuffleFetcher.scala:42)
    at org.apache.spark.shuffle.hash.HashShuffleReader.read(HashShuffleReader.scala:40)
    at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:92)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.FlatMappedRDD.compute(FlatMappedRDD.scala:33)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.rdd.MappedRDD.compute(MappedRDD.scala:31)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
    at org.apache.spark.scheduler.Task.run(Task.scala:56)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:196)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-03-17 21:05:17

当我给worker节点分配的内存比它多时,就会发生这种情况。由于没有交换,spark在没有更多内存的情况下尝试存储对象以进行混洗时崩溃。

解决方案是添加交换,或者将工作/执行器配置为使用更少的内存,同时使用MEMORY_AND_DISK存储级别进行多个持久化。

票数 60
EN

Stack Overflow用户

发布于 2015-03-10 20:51:36

我们在Spark上也有类似的错误,但我不确定它是否与您的问题有关。

我们在100 to的数据上使用了JavaPairRDD.repartitionAndSortWithinPartitions,它和你的应用程序一样总是失败。然后,我们查看了特定节点上的Yarn日志,发现存在某种内存不足问题,因此Yarn中断了执行。我们的解决方案是在.../spark/conf/spark-defaults.conf中更改/添加spark.shuffle.memoryFraction 0。这使得我们能够以这种方式处理更大的数据量(但不幸的是,不是无限的)。

票数 16
EN

Stack Overflow用户

发布于 2017-02-20 16:44:02

我在我的3台机器纱线集群上也遇到了同样的问题。我一直在更换RAM,但问题仍然存在。最后,我在日志中看到以下消息:

17/02/20 13:11:02 WARN spark.HeartbeatReceiver: Removing executor 2 with no recent heartbeats: 1006275 ms exceeds timeout 1000000 ms
17/02/20 13:11:02 ERROR cluster.YarnScheduler: Lost executor 2 on 1worker.com: Executor heartbeat timed out after 1006275 ms

在这之后,传来了这样的信息:

org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 67

我修改了spark-defaults.conf中的属性如下:

spark.yarn.scheduler.heartbeat.interval-ms 7200000
spark.executor.heartbeatInterval 7200000
spark.network.timeout 7200000

就这样!在此之后,我的工作顺利完成。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28901123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档