![在 AWS EMR 上升级到 Spark 2.1.0 后进程挂起](https://linux22.com/image/1202249/%E5%9C%A8%20AWS%20EMR%20%E4%B8%8A%E5%8D%87%E7%BA%A7%E5%88%B0%20Spark%202.1.0%20%E5%90%8E%E8%BF%9B%E7%A8%8B%E6%8C%82%E8%B5%B7.png)
我遇到了一个问题,执行器正在创建永不完成的任务,导致整个过程挂起。任务通常完成时间为约 4 秒,但已运行了一个半小时。这种情况并不经常发生,我认为大约 1/3 的时间会发生。
我有 32 个 c3.8xlarge 节点,因此它们有核心:32 内存:60 GiB 存储:640 SSD GB
我有来自多个来源的 RDD,它们正在被处理和组合在一起。该任务似乎作为 DAG 的一致部分而停滞,尽管我还没有充分检查它的位置以确保它 100% 始终在同一位置。在我观察到的点上,所有 RDD 都已合并为一个。
我注意到一些奇怪的症状:
只有一个执行器上的任务卡住了。该执行器上的一些任务已完成,但最终有 32 个任务卡住了。
卡住的任务在 UI 中没有启动时间。0ms 调度程序延迟,0 ms 任务反序列化时间,0 ms shuffle 读取时间。只有执行器计算时间。
卡住的执行器的线程转储显示执行器任务启动 worker-(32-63),而不是正常的执行器任务启动 worker-(0-31)。这些都处于线程状态“等待”。该阶段最终将到达除 32 之外的所有任务都已完成的阶段,因此当这些任务卡住时,所有其他任务仍在创建并正常完成。
当我从 Spark 1.6.1 升级到 2.1.0 时,这种情况开始发生。Spark 1.6.1 没有问题。