使用“要求发送地图输出位置以进行随机播放”引发无限期等待
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 划分
【讨论】:
以上是关于使用“要求发送地图输出位置以进行随机播放”引发无限期等待的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch SkipPolicy在处理异常时陷入无限循环
我可以在 web.config 中为 maxJsonLength 设置无限长度吗?
在 BigDecimal.divide 期间引发 ArithmeticException