MapReduce的并行执行效率

在运行大数据集的MapReduce任务时,发现效率低下,仅少数处理器被充分利用。经研究发现,问题源于MapReduce的配置文件。默认情况下,Map/Reduce容量设置为2,导致CPU利用率不足,集群并行执行效率不高。解决方案是调整$HADOOP_HOME/conf/mapred-site.xml文件,将Map Task Capacity设为CPU核心数,Reduce Task Capacity设为CPU核心数减2,以充分利用资源并提高并行执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从搭好Hadoop集群之后,再上面跑了一些程序,由于数据量较小,得到实验结果的时间也还可以忍受,因此也就没有关注MapReduce并行执行效率这方面的问题。后来跑了几个大的数据集,都发现非常的慢,于是就不得不关系效率方面的问题了。

查看任务管理器的时候发现有很多处理器是没有利用的,只有一两个的利用率较高,与我们对MapReduce的直觉相差很大,于是问了一个一直在研究Hadoop的同学,发现我们的配置文件是有问题的。MapReduce是通过slot来配置map/reduce capacity的(下图中矩形框框出的,Occupied Map/Reduce Slots显示的是在运行时实际占用了Capacity中的多少)。Hadoop默认情况下,map/reduce capacity都为2,因此,CPU的利用率不高,整个集群的并行执行效率也不高。


因此,需要在$HADOOP_HOME/conf/mapred-site.xml文件中进行配置,具体配置如下:

    <property>
        <name>mapred.tasktracker.map.tasks.maximum</name>
        <value>12</value>
        <description>The maximum number of map tasks that will be run 
            simultaneously by a task tracker.
        </description>
    </property>

    <property>
        <name>mapred.tasktracker.reduce.tasks.maximum</name>
        <value>6</value>
        <description>The maximum number of reduce tasks that will be run 
            simultaneously by a task tracker.
        </description>
    </property>

具体该将capacity设置为多少合适呢?这里可能要参考集群机器具体的硬件配置了。一般的,可以将Map Task Capacity设置为CPU的核心数,现在CPU每个核一般都会有多个线程(在任务管理器里会体现为多个核),设置中所参考的核心数是不包括这些线程虚拟出来的多核的。Reduce Task Capacity一般设置为Map Task Capacity的1/2或者1/4。

在我们的设置中,Map Task Capacity = CPU核心数,其实,Map Task Capacity + Reduce Task Capacity = CPU核心数 - 2比较好。因为我们的集群环境网速比较快,用户比较少,就没有给多个用户的并行放余量。设置时,需要考虑清楚这些情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值