在 AWS EMR 上升级到 Spark 2.1.0 后进程挂起

在 AWS EMR 上升级到 Spark 2.1.0 后进程挂起

我遇到了一个问题,执行器正在创建永不完成的任务,导致整个过程挂起。任务通常完成时间为约 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 没有问题。

相关内容