【发布时间】:2017-01-20 18:19:42
【问题描述】:
我们有一个在 Spark Standalone 上运行的非常复杂的应用程序。 在某些情况下,来自某个工作人员的任务会在 RUNNING 状态下无限地随机阻塞。
额外信息:
- 日志中没有任何错误
- 在调试中使用记录器运行,我没有看到任何相关消息(我看到任务何时开始但没有活动)
- 如果我只有 1 名工人,这些工作可以正常工作
- 相同的作业可以在适当的时间内第二次执行而不会出现任何问题
- 我没有任何可能导致某些任务延迟的非常大的分区。
- 在 spark 2.0 中,我已从 RDD 移至数据集,但我遇到了同样的问题
- 在 spark 1.4 中,我能够通过打开推测来克服这个问题,但在 spark 2.0 中,阻塞任务来自不同的工作人员(而在 1.4 中,我只有 1 个工作人员的阻塞任务)所以推测并不能解决我的问题.
- 我在更多环境中遇到问题,所以我认为它与硬件无关。
有没有人经历过类似的事情?关于如何识别问题的任何建议?
非常感谢!
稍后编辑:我想我面临着这里描述的相同问题:Spark Indefinite Waiting with "Asked to send map output locations for shuffle" 和这里:http://apache-spark-user-list.1001560.n3.nabble.com/Spark-stalling-during-shuffle-maybe-a-memory-issue-td6067.html,但两者都没有有效的解决方案。
日志中最后无限重复的是:[dispatcher-event-loop-18] DEBUG org.apache.spark.scheduler.TaskSchedulerImpl - parentName: , name: TaskSet_2, runningTasks: 6
【问题讨论】:
-
1) 你能提取一些实际阻塞的代码吗? 2) 你检查过 GC 日志吗 3) 你是否使用了某种形式的线程锁定/内部多线程?
-
1) 应用程序非常复杂,我找不到导致阻塞的实际部分。 2)日志中没有问题。即使这是一个 gc/内存问题,它对于同一个工作也会表现得相似。现在,相同的工作几乎在几秒钟内完成,但随机阻塞。 3)没有使用其他形式的多线程/锁定机制
标签: apache-spark