根据源码查看mapreduce作业分块逻辑

1.首先我们知道inputformat接口有两个方法
(旧版api 放置在 org.apache.hadoop.mapred
新版 api放置在 org.apache.hadoop.mapreduce)

第一个getSplits是获取分块的方法
第二个createRdcordReader是获取RecordReader
查看第一个方法 :
这里写图片描述

2.查看其子类FileInputformat的实现
这里写图片描述

决定splitsize的方法
这里写图片描述
splitsize 为 Math.max(minSize,Math.min(maxSize,blockSize))

3.splitSize计算过程

1)blockSize即为block块的size hadoop1.x的HDFS默认块大小为64MB;hadoop2.x的默认块大小为128MB
这里写图片描述
2)minsize
这里写图片描述
其中第一个参数:
这里写图片描述
另一个参数 :
这里写图片描述

从配置中读取该参数 mapreduce.input.fileinputformat.split.minsize 。默认为零
所以一般默认情况下 。minsize 是1
3)maxsize
这里写图片描述
而maxsize 是获取这个值 mapreduce.input.fileinputformat.split.maxsize
这个在配置文件中我没有找到。如果没有设置的话是 long MAX_VALUE

所以至此默认情况下 :minsize < blocksize< maxsize
即: splitsize 应该等于blocksize

4.计算方法
所以以文件200 m,blocksize 64m为例
根据2(源码中的计算方式 )
200/64 = 3 + 8m
m>64 * 0.1
200m文件应该分为 4个split

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值