如何使用hadoop2.x并行运行MapReduce任务



我希望我的映射和reduce任务并行运行。然而,尽管他们使出了浑身解数,但他们仍在按顺序运行。我在Elastic MapReduce上读到如何在Hadoop 2.4.0中设置每个节点并发运行的任务的精确最大数量,使用以下公式,可以设置并行运行的任务数量。

min (yarn.nodemanager.resource.memory-mb / mapreduce.[map|reduce].memory.mb, 
yarn.nodemanager.resource.cpu-vcores / mapreduce.[map|reduce].cpu.vcores)

但是,我做到了,正如您在下面使用的yarn site.xmlmapred site.xml中看到的那样。但这些任务仍然按顺序运行。请注意,我使用的是开源Apache Hadoop,而不是Cloudera。转移到Cloudera能解决问题吗?还要注意,我的输入文件足够大,dfs.block.size也不应该成为问题。

纱线站点.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>

映射的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是为在culster的每个节点上执行Map/Reduce任务而保留的逻辑执行模板。

yarn.nodemanager.resource.memory-mb属性告诉YARN资源管理器为要在节点中调度以执行Map/Reduce任务的所有容器保留那么多ram内存。这是为每个容器保留的内存的最大上限。

但在您的情况下,节点中的可用内存几乎是11GB,并且您已经将yarn.nodemanager.resource.memory-mb配置为几乎128GB(131072),mapreduce.map.memory.mb&CCD_ 4为16GB。Map/Reduce容器所需的上限大小为16Gb,高于11GB的可用内存*。这可能是因为在节点中只分配了一个容器来执行。

我们将减少mapreduce.map.memory.mbmapreduce.reduce.memory.mb属性的值,而不是空闲内存的值,以使多个容器并行运行。

还可以看到一些增加可用内存的方法,因为它已经使用了90%以上。

希望这能有所帮助:)。。

最新更新