尽管内存可用,YARN 作业仍停留在 ACCEPTED 状态
YARN jobs getting stuck in ACCEPTED state despite memory available
集群进入死锁状态并停止分配容器,即使 GB 的 RAM 和 Vcores 可用也是如此。
只有当我们并行启动大量作业时才会发生这种情况,其中大多数是 Oozie
作业,其中包含许多 fork
ed 操作。
经过大量搜索和阅读相关问题和文章后,我们遇到了一个名为 maxAMShare
的 属性 用于 YARN 作业调度程序(我们正在使用 Fair Scheduler)。
什么意思?
可分配给 Application Master 的用户队列共享内存和 vcore 的百分比。默认值:0.5 (50%)。 Source
死锁是怎么造成的?
当我们将并行启动多个 oozie 作业时,每个 oozie 作业和分叉操作都需要首先为 oozie 启动器分配几个 ApplicationMaster 容器,然后启动其他容器来执行实际的操作任务。
在我们的案例中,我们实际上并行启动了大约 20-30 个 oozie 作业,每个作业都有近 20 个分叉操作。由于每个操作都需要 2 个 ApplicationMaster,因此仅 Oozie ApplicationMaster 就阻止了近 800 个容器。
因此,我们达到了用户队列的 50% 默认 maxAMShare
限制。 YARN 不允许为 运行 实际工作创建新的 ApplicationMaster。
解决方案?
一个直接的建议是通过将 属性 设置为 -1.0 来禁用检查。但不推荐这样做。您可能再次将所有或大部分资源分配给 AM,而实际完成的工作将非常少。
其他选项(我们继续使用)是在 oozie 配置中为 AM 指定一个单独的队列,然后将 maxAMShare 属性 设置为 1.0。通过这种方式,您可以控制在不影响其他作业的情况下可以分配多少资源给 AM。 Reference
<global>
<configuration>
<property>
<name>oozie.launcher.mapred.job.queue.name</name>
<value>root.users.oozie_am_queue</value>
</property>
</configuration>
</global>
希望这能为面临相同问题的人们节省大量时间。死锁也可能有许多其他原因,这些原因已经在 SO 的其他问题中讨论过。
集群进入死锁状态并停止分配容器,即使 GB 的 RAM 和 Vcores 可用也是如此。
只有当我们并行启动大量作业时才会发生这种情况,其中大多数是 Oozie
作业,其中包含许多 fork
ed 操作。
经过大量搜索和阅读相关问题和文章后,我们遇到了一个名为 maxAMShare
的 属性 用于 YARN 作业调度程序(我们正在使用 Fair Scheduler)。
什么意思?
可分配给 Application Master 的用户队列共享内存和 vcore 的百分比。默认值:0.5 (50%)。 Source
死锁是怎么造成的?
当我们将并行启动多个 oozie 作业时,每个 oozie 作业和分叉操作都需要首先为 oozie 启动器分配几个 ApplicationMaster 容器,然后启动其他容器来执行实际的操作任务。
在我们的案例中,我们实际上并行启动了大约 20-30 个 oozie 作业,每个作业都有近 20 个分叉操作。由于每个操作都需要 2 个 ApplicationMaster,因此仅 Oozie ApplicationMaster 就阻止了近 800 个容器。
因此,我们达到了用户队列的 50% 默认 maxAMShare
限制。 YARN 不允许为 运行 实际工作创建新的 ApplicationMaster。
解决方案?
一个直接的建议是通过将 属性 设置为 -1.0 来禁用检查。但不推荐这样做。您可能再次将所有或大部分资源分配给 AM,而实际完成的工作将非常少。
其他选项(我们继续使用)是在 oozie 配置中为 AM 指定一个单独的队列,然后将 maxAMShare 属性 设置为 1.0。通过这种方式,您可以控制在不影响其他作业的情况下可以分配多少资源给 AM。 Reference
<global> <configuration> <property> <name>oozie.launcher.mapred.job.queue.name</name> <value>root.users.oozie_am_queue</value> </property> </configuration> </global>
希望这能为面临相同问题的人们节省大量时间。死锁也可能有许多其他原因,这些原因已经在 SO 的其他问题中讨论过。