Spark任务停留在RUNNING上

时间:2018-01-19 19:56:54

标签: apache-spark

我正在尝试在我的Yarn集群上运行Spark ML管道(从JDBC加载一些数据,运行一些变换器,训练模型)但每次运行它时,一对 - 有时一个,有时是3或4个 - 我的遗嘱执行人员遇到了第一个任务集(他们的3个核心分别是3个任务),而其余任务正常运行,一次检查3个任务。

在用户界面中,您会看到以下内容: Spark web UI screenshot

到目前为止我观察过的一些事情:

  • 当我设置执行程序使用1个核心,每个核心spark.executor.cores时(即一次运行1个任务),问题不会发生;
  • 卡住的执行程序似乎总是那些为了运行任务而必须将一些分区拖到他们面前的执行者;
  • 卡住的任务最终会被另一个实例成功推测性地执行;
  • 有时,单个任务会卡在执行程序中,否则正常,其他2个核心将保持正常工作;但是;
  • 卡住的执行器实例看起来一切正常:CPU大约100%,有足够的内存备用,JVM进程还活着,Spark或Yarn都没有记录任何异常情况,他们仍然可以接收来自驱动程序,例如“放弃此任务,其他人已经推测性地执行了它” - 但由于某种原因,他们不会丢弃它;
  • 那些执行人员永远不会被司机杀死,所以我想他们会继续发送他们的心跳;

关于可能导致这种情况或我应该尝试什么的任何想法?

1 个答案:

答案 0 :(得分:9)

想出来。对于后代:使用线程不安全的数据结构(可变的HashMap)。由于同一台机器上的执行程序共享一个JVM,因此导致数据争用锁定了单独的线程/任务。

结果:当你有spark.executor.cores > 1(你可能应该)时,请确保你的代码是线程安全的。