一、MapReduce中数据流向
二、MapTask并行度
1、原理概览
数据块:Block
是HDFS
物理上把数据分成一块一块。数据块是HDFS
存储数据单位。
数据切片:数据切片只是在逻辑上对输入进行分片
,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce
程序计算输入数据的单位,一个切片会对应启动一个MapTask
。
1)一个Job
的Map
阶段并行度由客户端在提交Job
时的切片数决定
2)每一个Split
切片分配一个MapTask
并行实例处理
3)默认情况下,切片大小
=BlockSize
4)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
所以,会开启几个MapTask
线程并发处理任务,是由切片数量决定的。
一般,切片大小的设置要与Block大小保持一致。这样性能最优。
2、相关配置
切片大小的配置
mapred-default.xml
最小切片大小配置
默认0,如果配置0,则代码层面分配是1
xml
<property>
<name>mapreduce.input.fileinputformat.split.minsize</name>
<value>0</value>
<description>The minimum size chunk that map input should be split
into. Note that some file formats may have minimum split sizes that
take priority over this setting.</description>
</property>
最大切片大小配置
默认不配置,所以代码获取不到,代码给予Long.MAX_VALUE
mapreduce.input.fileinputformat.split.maxsize
BlockSize
的配置
hdfs-default.xml
xml
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
<description>
The default block size for new files, in bytes.
You can use the following suffix (case insensitive):
k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
Or provide complete size in bytes (such as 134217728 for 128 MB).
</description>
</property>