我正在尝试在我的Yarn集群上运行Spark ML管道(从JDBC加载一些数据,运行一些变换器,训练模型)但每次运行它时,一对 - 有时一个,有时是3或4个 - 我的遗嘱执行人员遇到了第一个任务集(他们的3个核心分别是3个任务),而其余任务正常运行,一次检查3个任务。
到目前为止我观察过的一些事情:
spark.executor.cores
时(即一次运行1个任务),问题不会发生; 关于可能导致这种情况或我应该尝试什么的任何想法?
答案 0 :(得分:9)
想出来。对于后代:使用线程不安全的数据结构(可变的HashMap)。由于同一台机器上的执行程序共享一个JVM,因此导致数据争用锁定了单独的线程/任务。
结果:当你有spark.executor.cores > 1
(你可能应该)时,请确保你的代码是线程安全的。