MapReduce split和block的关系

block是物理上的划分,hadoop 2.x中block的大小默认为128M,每一个文件都会被切分成多个block。

split只是一种逻辑上划分,目的是为了让Map Task更好的获取数据输入。

例子:如何计算map数量?

假设有两个文件,block数如下:

File 1 : Block11, Block 12, Block 13, Block 14, Block 15
File 2 : Block21, Block 22, Block 23

totalSize = 8(总的block数量)
设置的并行度为2,那么:
goalSize = 8/2=4

那么一个split包含的block数目是:

long splitSize = computeSplitSize(goalSize, minSize, blockSize);
protected long computeSplitSize(long goalSize, long minSize, long blockSize) {
         return Math.max(minSize, Math.min(goalSize, blockSize));
}

所以File1被分成两个split,File2一个split。
Split 1: Block11, Block12, Block13,Block14
Split 2: Block15
Split 3: Block21, Block22, Block23

maptask的个数是由splits的长度决定的。最终map task的数量是3。

map数并不是单纯的由用户设置决定的,需要最终去计算。

FileSplit中的这个属性有利于调度作业时候的数据本地性问题。如果一个tasktracker前来索取task,jobtracker就会找个task给他,找到一个maptask,得先看这个task的输入的FileSplit里hosts是否包含tasktracker所在机器,也就是判断和该tasktracker同时存在一个机器上的datanode是否拥有FileSplit中某个Block的备份。

几个简单的结论:

  1. 一个split不会包含零点几或者几点几个Block,一定是包含大于等于1个整数个Block
  2. 一个split不会包含两个File的Block,不会跨越File边界
  3. split和Block的关系是一对多的关系
  4. maptasks的个数最终决定于splits的长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值