【发布时间】:2020-05-28 03:29:27
【问题描述】:
谁能澄清一下 YARN 是否可以抢占 Spark 驱动程序,因为应用程序占用的资源超出了它的队列允许的范围?
这个问题来自于 prod 集群的场景:
- CDH 5.12,hadoop 2.6.0,使用公平调度器
- 队列 A = 50%,队列 B = 25%,队列 C = 25%
- 两个应用,比如 app1 和 app2 在队列 B 中运行,并且吃掉了所有集群资源。
- 一段时间后,app3 在队列 A 中启动并声明其资源
- app1 和 app2 杀死了它们的一些执行者(至少我看到了
ERROR | SIGTERM handler | org.apache.spark.executor.CoarseGrainedExecutorBackend | RECEIVED SIGNAL TERM) - app1 打印有关 ApplicationMaster 死亡的错误消息:
ERROR | SIGTERM handler | org.apache.spark.deploy.yarn.ApplicationMaster | RECEIVED SIGNAL TERM。 NM 日志只是说驱动程序容器已被杀死:Stopping container with container Id: app1_driver_containerId。
我在文档中找不到任何证据表明 RM 可以杀死应用程序大师。文档说它礼貌地要求主人释放资源,我他们没有被释放然后它强行杀死容器。它可以杀死AM吗?
【问题讨论】:
-
AM 只是 YARN 的另一个容器,为什么不呢?
-
我认为不会的原因是它写在 hortonworks 博客文章 (hortonworks.com/blog/…) 中。
Instead of killing thus-marked containers immediately to free resources, PreemptionMonitor inside the ResourceManager notifies ApplicationMasters (AM) so that AMs can take advanced actions before ResourceManager itself commits a hard decision。另见部分:“抢占对应用程序的影响” -
那么,您的
yarn.resourcemanager.scheduler.monitor.enable设置是什么,以及那里提到的其他属性?您确定该博文适用于您的 YARN 版本吗? -
我已经检查了博客文章中提到的属性,但没有找到它们,在 grepping 时我意识到我对使用的调度程序大错特错!真丢脸...,这是公平的调度程序,因为
yarn.resourcemanager.scheduler.class是org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。所以我挖掘了一个错误的方向(。我已经为其他读者更新了问题。谢谢@cricket_007
标签: hadoop apache-spark hadoop-yarn