擅长:python、mysql、java
<p>我找到了一个意想不到的解决办法。在</p>
<p>似乎当前的Hadoop文档并没有反映awsemr中纱线的正确配置,所以我使用了试错法来找到一种使其工作的方法。在</p>
<p>我用的不是容量调度程序,而是公平调度程序。但它仍然将所有应用程序放在同一个队列(“池”)中,所以我不得不手动将每个作业调度到单独的队列中,并配置这些队列以占用适当数量的资源。
这就是我所做的:</p>
<p>纱线-站点.xml在</p>
<pre><code><property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>fair-scheduler.xml</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
</code></pre>
<p>公平调度的目的-公平地调度任务和分配资源。但是(出乎意料的是,lmao)如果没有启用抢占,它就不会这样做。第一个任务会吃掉所有的资源,如果你明确不要求的话,它在完成之前不会把它们给别人。在</p>
<p>我就是这样做的:</p>
<p>公平的-调度程序.xml在</p>
^{pr2}$
<p>现在我有2个队列(大队列和小队列),小队列可以运行4个小任务,大队列可以同时运行2个大任务。大队列的权重更大,因此需要更多的资源。如果小队列占用了超过40%的资源,其他队列就会开始“国有化”它并带走资源。大队列(60%)也一样。
我不确定每个队列中发生了什么,但似乎资源试图在应用程序之间平均分配。在</p>
<p>我的新年愿望是hadoop和EMR的详细文档。在</p>