gpt4 book ai didi

apache-spark - 处理大数据集时出现 FetchFailedException 或 MetadataFetchFailedException

转载 作者:可可西里 更新时间:2023-11-01 15:49:51 25 4
gpt4 key购买 nike

当我使用 1 GB 数据集运行解析代码时,它完成时没有任何错误。但是,当我一次尝试 25 GB 的数据时,出现以下错误。我试图了解如何避免以下失败。很高兴听到任何建议或想法。

不同的错误,

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

org.apache.spark.shuffle.FetchFailedException: Failed to connect to ip-xxxxxxxx

org.apache.spark.shuffle.FetchFailedException: Error in opening FileSegmentManagedBuffer{file=/mnt/yarn/nm/usercache/xxxx/appcache/application_1450751731124_8446/blockmgr-8a7b17b8-f4c3-45e7-aea8-8b0a7481be55/08/shuffle_0_224_0.data, offset=12329181, length=2104094}

集群详细信息:

Yarn: 8 Nodes
Total cores: 64
Memory: 500 GB
Spark Version: 1.5

Spark 提交语句:

spark-submit --master yarn-cluster \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.shuffle.service.enabled=true \
--executor-memory 4g \
--driver-memory 16g \
--num-executors 50 \
--deploy-mode cluster \
--executor-cores 1 \
--class my.parser \
myparser.jar \
-input xxx \
-output xxxx \

堆栈跟踪之一:

at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:460)
at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:456)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
at org.apache.spark.MapOutputTracker$.org$apache$spark$MapOutputTracker$$convertMapStatuses(MapOutputTracker.scala:456)
at org.apache.spark.MapOutputTracker.getMapSizesByExecutorId(MapOutputTracker.scala:183)
at org.apache.spark.shuffle.hash.HashShuffleReader.read(HashShuffleReader.scala:47)
at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:90)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:88)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

最佳答案

此错误几乎可以肯定是由执行程序上的内存问题引起的。我可以想出几种方法来解决这些类型的问题。

1) 您可以尝试使用更多分区运行(在您的dataframe 上执行repartition)。当一个或多个分区包含的数据多于内存中容纳的数据时,通常会出现内存问题。

2) 我注意到您没有显式设置 spark.yarn.executor.memoryOverhead,因此它将默认为 max(386, 0.10* executorMemory)在您的情况下为 400MB。这对我来说听起来很低。我会尝试将其增加到 1GB(请注意,如果将 memoryOverhead 增加到 1GB,则需要将 --executor-memory 降低到 3GB)

3) 查看故障节点上的日志文件。您要查找文本“Killing container”。如果您看到文本“运行超出物理内存限制”,根据我的经验,增加 memoryOverhead 将解决问题。

关于apache-spark - 处理大数据集时出现 FetchFailedException 或 MetadataFetchFailedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com