MapReduce作业中Map\Reduce Tasks 数目的指定

MapReduce作业中Map\Reduce Tasks 数目的指定
1 、MapReduce作业中Map Task 数目的指定 :1 )  MapReduce从HDFS中读取Input文件,通过Inputformat对文件进行Split分割,得到Splits数目。 Split是MapReduce中最小的计算单元,一个Split文件对应一个Map Task。
2)源码解读:
file:///C:/Users/Ganymede/AppData/Local/Temp/Wiz/2c35b4e7-1282-47b2-a041-351f4f09d78e_4_files/1ab53ab8-c2a3-4341-b9d6-67ea5cb3a342.jpg
由源码可知:
maxSize = mapred.max.split.size.  //默认 long max
minSize  = mapred.min.split.size.  //默认 1

splitSize 计算公式:
splitSize = max(minSize , min(maxSize,blockSize)) (默认= 64M)


3) 当执行wordcount时:
(1)一个输入文件如果小于64M,默认情况则保存在hdfs上的一个block中,对应一个Split文件,所以将产和一个Map Task。
(2)如果输入一个文件为150M,默认情况则保存在hdfs上的三个block,对应三个Split文件,所以将产和三个Map Task。
(3)如果有输入三个文件都小于64M,默认情况下会保存在三个不同的block中,所以对应三个Split文件,也将产和三个Map Task。


4)用户可自行指定block与split的关系,HDFS中的一个block,一个Split也可以对应多个block。Split与block的关系是一对多的关系。


5)总结MapReduce作业中Map Task 数目是由:
(1)输入文件的个数与大小
(2)hadoop设置mapred.max.split.size大小决定的


6)修改mapred.max.split.size
设置文件 mapred-site.xml 
< ?xml version="1.0"?>
< ?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
< configuration>
        <property>
                   <name>mapred.job.tracker</name>
                    <value>hadoop.main:9001</value>
          </property>
          <property>
                   <name>mapred.max.split.size</name>
                    <value>300</value>
          </property>
< /configuration>


运行示例:
有三个输入文件:
file:///C:/Users/Ganymede/AppData/Local/Temp/Wiz/2c35b4e7-1282-47b2-a041-351f4f09d78e_4_files/97b2c8aa-b64b-43d2-b3ca-fe6edaa5de0e.png


根据公式,splitsize = splitSize = max(1, min(300b,64*1024*1024))  = 300
a.txt 的 splits数   1473 /300 = 5
b.txt 的 splits数   25 / 300 = 1
c.txt 的 splits数   40 / 300 = 1




2、MapReduce作业中Reduce Task 数目的指定 :
1)JobClient类中submitJobInternal方法中指定   int reduces = jobCopy.getNumReduceTasks();

2) 而JobConf类中,public int getNumReduceTasks() { return getInt("mapred.reduce.tasks", 1); }
因此,Reduce Task 数目是由mapred.reduce.tasks,如果不指定默认为1。


file:///C:/Users/Ganymede/AppData/Local/Temp/Wiz/2c35b4e7-1282-47b2-a041-351f4f09d78e_4_files/59b8a73e-3cc0-4ec5-bad3-4d417d5d9d7a.png


3) reduce task的数目,决定了输出文件的个数。
统计wordcount可以有两个以上的reduce,如果是排序的mapreduce,两个或者以上的reduce的结果都是不合理的。

0 个评论

要回复文章请先登录注册