使用“要求发送地图输出位置以进行随机播放”引发无限期等待

Posted

技术标签:

【中文标题】使用“要求发送地图输出位置以进行随机播放”引发无限期等待【英文标题】:Spark Indefinite Waiting with "Asked to send map output locations for shuffle" 【发布时间】:2014-10-25 09:31:12 【问题描述】:

我的工作经常会收到这样的信息:

14/09/01 00:32:18 INFO spark.MapOutputTrackerMasterActor: Asked to send map output locations for shuffle 0 to spark@*:37619

如果有人能解释 Spark 在输出此消息时正在做什么,那就太好了。这条消息是什么意思?用户可能做错了什么导致这种情况?应该调整哪些可配置项?

真的很难调试,因为它不 OOM,它不给出 ST,它只是坐着,坐着,坐着。

这是 Spark 至少早在 1.0.0 就存在的问题,并且在 Spark 1.5.0 中仍然存在

【问题讨论】:

可能是死锁?你能把jstack的线程堆栈跟踪贴上去吗? 你能重现它,还是它有时会发生? 【参考方案1】:

基于this thread,最新版本的 spark 在改组方面变得更好(如果无论如何失败,也会报告错误)。此外,还提到了以下提示:

这很可能是因为序列化的地图输出位置缓冲区 超过 akka 帧大小。请尝试设置“spark.akka.frameSize” (默认 10 MB)到更高的数字,例如 64 或 128。

在最新版本的 Spark 中,这会引发更好的错误,因为 值多少钱。

一种可能的解决方法:

如果 groupByKey 中的键分布有偏差(有些 键比其他键出现的频率更高)您应该考虑修改 你的工作是尽可能使用 reduceByKey。

还有一条支线:

通过为每个执行程序分配一个内核,我解决了这个问题。

也许你的 executor-memory 配置应该被 executor-cores 划分

【讨论】:

以上是关于使用“要求发送地图输出位置以进行随机播放”引发无限期等待的主要内容,如果未能解决你的问题,请参考以下文章

什么 UWP API 引发购买事件?

Spring Batch SkipPolicy在处理异常时陷入无限循环

我可以在 web.config 中为 maxJsonLength 设置无限长度吗?

在 BigDecimal.divide 期间引发 ArithmeticException

方舟编译器破空而来,安卓无限接近iOS,华为这次的技术大招牛在哪?

超过了 Django 最大递归深度。无限查看循环