在经过大量搜索和阅读相关问题和文章后,我们遇到了一个名为的房产 maxAMShare 对于YARN作业调度程序(我们使用Fair Scheduler)。
maxAMShare
的 这是什么意思? 强>
来自用户队列共享的内存和vcores的百分比,可以分配给Application Masters。默认值:0.5(50%)。 资源
的 它是如何引起僵局的? 强>
当我们并行启动多个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分配多少资源,而不会影响其他作业。 参考
<global> <configuration> <property> <name>oozie.launcher.mapred.job.queue.name</name> <value>root.users.oozie_am_queue</value> </property> </configuration> </global>
希望这对于面临同样问题的人来说是一个重要的节省时间。还有许多其他原因导致死锁,这些原因已经在其他问题上讨论过了。