发生org.apache.spark.shuffle.元数据获取失败异常的可能原因是什么:缺少随机播放的输出位置?

r55awzrz  于 2023-02-05  发布在  Apache
关注(0)|答案(3)|浏览(179)

我正在EC2群集上部署Spark数据处理作业,该作业对于群集来说很小(16核,总共120G RAM),最大的RDD只有76k+行,但中间严重倾斜(因此需要重新分区)并且在序列化之后每行具有大约100k的数据。该作业总是在重新分区时卡住。即,作业将不断收到以下错误并重试:

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

org.apache.spark.shuffle.FetchFailedException: Error in opening FileSegmentManagedBuffer

org.apache.spark.shuffle.FetchFailedException: java.io.FileNotFoundException: /tmp/spark-...

我已经尝试找出问题所在,但似乎抛出这些错误的机器的内存和磁盘消耗都低于50%。我还尝试了不同的配置,包括:

let driver/executor memory use 60% of total memory.
let netty to priortize JVM shuffling buffer.
increase shuffling streaming buffer to 128m.
use KryoSerializer and max out all buffers
increase shuffling memoryFraction to 0.4

但是它们都不起作用。小作业总是触发相同的一系列错误和最大重试次数(最多1000次)。在这种情况下如何解决这个问题?
如果你有线索的话,谢谢你。

9udxz4iz

9udxz4iz1#

如果出现类似的错误,请检查日志。

ERROR 2015-05-12 17:29:16,984 Logging.scala:75 - Lost executor 13 on node-xzy: remote Akka client disassociated

每次你得到这个错误都是因为你失去了一个遗嘱执行人。至于为什么你失去了一个遗嘱执行人,那是另一回事,再次检查你的日志寻找线索。
有一件事Yarn可以杀死你的工作,如果它认为看到你是使用"太多的内存"
检查以下内容:

org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl  - Container [<edited>] is running beyond physical memory limits. Current usage: 18.0 GB of 18 GB physical memory used; 19.4 GB of 37.8 GB virtual memory used. Killing container.

另请参阅:http://apache-spark-developers-list.1001551.n3.nabble.com/Lost-executor-on-YARN-ALS-iterations-td7916.html
当前的技术水平是增加Spark. Yarn. Executor. MemoryOverhead,直到作业停止失败。我们确实有计划尝试根据所请求的内存量自动调整此值,但这仍然只是一种启发式方法。

fdbelqdn

fdbelqdn2#

我还收到了错误

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

我进一步查看日志发现

Container killed on request. Exit code is 143

在搜索退出代码后,我意识到这主要与内存分配有关。于是我检查了为执行器配置的内存量。我发现错误地为驱动程序配置了7g,而为执行器只配置了1g。在增加执行器内存后,我的spark作业成功运行。

o2rvlv0m

o2rvlv0m3#

似乎我做了changeQueue操作后使用可能会导致这个问题,服务器已经改变后,我改变了队列。

相关问题