Hadoop3 - MapReduce 并行机制
Posted 小毕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop3 - MapReduce 并行机制相关的知识,希望对你有一定的参考价值。
一、MapReduce 并行机制
MapReduce 并行分为 Map 阶段并行 和 Reduces 阶段并行,其中Reduces 阶段并行 是可以直接手动设置:
job.setNumReduceTasks(4);
但是 Map 阶段的并行好像没有这种直接设置数量的参数给我们,那正常处理文件 Map 阶段的并行是怎么分割呢。
Map 阶段并行度是由客户端在提交job时决定的,即客户端提交job之前会对待处理数据进行逻辑切片。切片完成会形成切片规划文件,每个逻辑切片最终对应启动一个 MapTask。
逻辑切片机制由 FileInputFormat
实现类的 getSplits()
方法完成。
其中拆分过程大致为:
找出指定输入目录下的每个文件的大小,对每个文件进行 block(默认 128M) 大小的分割,如果 <= block 的部分也会单独分割成一个,比如指定输入目录下有两个文件:
file1(300M)
file2(100M)
则会拆分成 :
file1.split1(0 - 128M)
file1.split2(128 - 256M)
file1.split3(256 - 300M)
file2.split1(0 - 100M)
总共 4 个 MapTask 进行处理。
其中设计到三个重要的参数:minSize、maxSize、blockSize,其中真正的切片大小,则是根据下面方式选择出来的
Math.max(minSize, Math.min(maxSize, blockSize));
修改 blockSize
的大小,可以修改 hdfs-site.xml
文件:
<property>
<name>dfs.block.size</name>
<value>268435456</value>
</property>
以上是关于Hadoop3 - MapReduce 并行机制的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop3 - MapReduce SequenceFile MapFile 格式存储