系列文章目录
大数据框架Hadoop:第一章 HDFS分布式文件系统(一)
大数据框架Hadoop:第一章 HDFS分布式文件系统(二)
大数据框架Hadoop:第二章 计算框架MapReduce(一)
大数据框架Hadoop:第二章 计算框架MapReduce(二)
前言
上文中介绍了什么是MapReduce,描述了MapReduce的核心思想以及编程的8个步骤,本文将继续深入了解MapReduce。
一、Map Task数量及切片机制
1.MapTask个数
- 在运行我们的MapReduce程序的时候,我们可以清晰的看到会有多个mapTask的运行,那么maptask的个数究竟与什么有关,是不是maptask越多越好,或者说是不是maptask的个数越少越好呢???我们可以通过MapReduce的源码进行查看mapTask的个数究竟是如何决定的;
- 在MapReduce当中,每个mapTask处理一个切片split的数据量,注意切片与block块的概念很像,但是block块是HDFS当中存储数据的单位,切片split是MapReduce当中每个MapTask处理数据量的单位;
- MapTask并行度决定机制;
- 数据块:Block是HDFS物理上把数据分成一块一块;
- 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储;
- 查看FileInputFormat的源码,里面getSplits的方法便是获取所有的切片,其中有个方法便是获取切片大小;
- 切片大小的计算公式:
Math.max(minSize, Math.min(maxSize, blockSize));
mapreduce.input.fileinputformat.split.minsize=1 默认值为1
mapreduce.input.fileinputformat.split.maxsize= Long.MAXValue 默认值Long.MAXValue
blockSize为128M
- 由以上计算公式可以推算出split切片的大小刚好与block块相等
- 那么hdfs上面如果有以下两个文件,文件大小分别为300M和10M,那么会启动多少个MapTask???
#输入文件两个
file1.txt 300M
file2.txt 10M
#经过FileInputFormat的切片机制运算后,形成的切片信息如下:
file1.txt.spl