我希望我的地图和减少任务并行运行。然而,尽管尝试了所有的技巧,它们仍然按顺序运行。我读自如何在 Elastic MapReduce 上的 Hadoop 2.4.0 中设置每个节点并发运行任务的精确最大数量 https://stackoverflow.com/questions/25193201/how-to-set-the-precise-max-number-of-concurrently-running-tasks-per-node-in-hado,使用以下公式,可以设置并行运行的任务数。
min (yarn.nodemanager.resource.memory-mb / mapreduce.[map|reduce].memory.mb,
yarn.nodemanager.resource.cpu-vcores / mapreduce.[map|reduce].cpu.vcores)
然而,我这样做了,正如你可以从纱线站点.xml and mapred-site.xml我正在使用下面。但任务仍然按顺序运行。请注意,我使用的是开源 Apache Hadoop,而不是 Cloudera。迁移到 Cloudera 可以解决问题吗?另请注意,我的输入文件足够大dfs.块大小也不应该是一个问题。
纱线站点.xml
<configuration>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>131072</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>64</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>16384</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>16384</value>
</property>
<property>
<name>mapreduce.map.cpu.vcores</name>
<value>8</value>
</property>
<property>
<name>mapreduce.reduce.cpu.vcores</name>
<value>8</value>
</property>
</configuration>
Container是为集群各节点执行Map/Reduce任务而预留的逻辑执行模板。
The yarn.nodemanager.resource.memory-mb
属性告诉 YARN 资源管理器为节点中要分派的所有容器保留足够的 RAM 内存以执行 Map/Reduce 任务。这是为每个容器保留的内存的最大上限。
但在你的情况下,节点中的可用内存几乎是11GB,并且你已经配置了yarn.nodemanager.resource.memory-mb
到近 128GB(131072) ,mapreduce.map.memory.mb
& mapreduce.reduce.memory.mb
为16GB。 Map/Reduce 容器所需的上限大小为 16GB,高于 11GB 的可用内存*。这可能是您在节点中仅分配一个容器用于执行的原因。
我们将减少mapreduce.map.memory.mb
, mapreduce.reduce.memory.mb
属性比可用内存的值要多一个容器并行运行。
另请参阅一些增加可用内存的方法,因为它已经使用了 90% 以上。
希望这可以帮助 :) ..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)