我的火花工作的第一阶段非常简单。
RDD[String]
RDD[Map[String,Any]]
RDD[Map[String,Any]]
.coalesce(100, true)
)当它运行时,我观察到一种非常特殊的行为。执行程序的数量增长,直到我在spark.dynamicAllocation.maxExecutors
中指定的给定限制(在我的应用程序中通常为100或200)。然后它开始迅速减少(大约14000/33428个任务)并且只剩下几个执行器。他们是killed by the drive
。完成此任务后。执行程序的数量增加回其最大值。
下面是最低的执行者数量的截图。
这是任务摘要的屏幕截图。
我猜这些执行者因为空闲而被杀死。但是,在这种情况下,我不明白为什么他们会闲着。在舞台上还有很多工作要做......
你知道为什么会这样吗?
修改
有关执行者被杀的驱动程序日志的更多详细信息:
16/09/30 12:23:33 INFO cluster.YarnClusterSchedulerBackend: Disabling executor 91.
16/09/30 12:23:33 INFO scheduler.DAGScheduler: Executor lost: 91 (epoch 0)
16/09/30 12:23:33 INFO storage.BlockManagerMasterEndpoint: Trying to remove executor 91 from BlockManagerMaster.
16/09/30 12:23:33 INFO storage.BlockManagerMasterEndpoint: Removing block manager BlockManagerId(91, server.com, 40923)
16/09/30 12:23:33 INFO storage.BlockManagerMaster: Removed 91 successfully in removeExecutor
16/09/30 12:23:33 INFO cluster.YarnClusterScheduler: Executor 91 on server.com killed by driver.
16/09/30 12:23:33 INFO spark.ExecutorAllocationManager: Existing executor 91 has been removed (new total is 94)
登录执行程序
16/09/30 12:26:28 INFO rdd.HadoopRDD: Input split: hdfs://...
16/09/30 12:26:32 INFO executor.Executor: Finished task 38219.0 in stage 0.0 (TID 26519). 2312 bytes result sent to driver
16/09/30 12:27:33 ERROR executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL 15: SIGTERM
16/09/30 12:27:33 INFO storage.DiskBlockManager: Shutdown hook called
16/09/30 12:27:33 INFO util.ShutdownHookManager: Shutdown hook called
答案 0 :(得分:0)
我在由于空闲超时而被杀死的执行程序上看到了这个问题。我有一个非常苛刻的计算负载,但它主要是在 UDF 中计算的,对 Spark 不可见。我相信有一些可以调整的火花参数。
尝试查看 https://spark.apache.org/docs/latest/configuration.html#spark-properties 中的 spark.executor
参数,看看是否有任何内容跳出。