Spark任务停留在RUNNING上

ktd*_*drv 4 apache-spark

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

在UI中,您会看到以下内容: Spark web UI截图

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

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

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

ktd*_*drv 11

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

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