- MapTask并行度
- 问题:
- a文件300M,b文件100M,两个文件都存入hdfs,并作为某个mr任务的输入数据,现在我们请问下当前这个mr任务的split,以及MapTask的并行度是多少呢?
- 切片的计算方式:按照文件逐个计算,
- a: 0-128M 128-256M 256-300M
- b:0-100M
- 结果:4个split;并行度为4!!!
- 注意:在大数据分布式计算框架中,移动计算也不要移动数据,移动数据的成本很高,移动计算比较简单。
- 问题:
- 切片大小等于block大小,并行度等于split数量!!
- shuffle机制(MR的核心阶段 重点)
- shuffle机制——Combiner组件
- CombineInputForMat切片原理:
- 4个小文件:
- 2M 7M 0.3M 8.2M
- 假设设置setMaxInputSplitSize的值为4M
- 划分:
- 2M<4M,那么只划分为一块;
- 7M>4M,但不是大于2倍,那么平均划分成3.5M共两块;
- 0.3M<4M,那么划分为一块;
- 8.2M>4M,且大于2倍,那么先按照4M 划分一块,再将剩下的平均划分成2.1M共两块;
- 2M 3.5M 3.5M 0.3M 4M 2.1M 2.1M 共7个虚拟存储块;
- 所以:最终会形成3个切片 (2+3.5) (3.5+0.3+4) (2.1+2.1) (小的虚拟块不够4M,就将下一块加一起,再次比较)
- 4个小文件: