概述
从搭好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比较好。因为我们的集群环境网速比较快,用户比较少,就没有给多个用户的并行放余量。设置时,需要考虑清楚这些情况。
最后
以上就是兴奋夕阳为你收集整理的MapReduce的并行执行效率的全部内容,希望文章能够帮你解决MapReduce的并行执行效率所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复