job的文件split计算法则

  • 计算切片数量和大小(注意视频中的是hadoop 2.7.3,每个版本的方法都有变动,以实际为准)

List<InputSplit> splits = input.getSplits(job);

  • 切片数量选择过程

 

最小值(肯定>=1):long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

返回的是1

最大值(肯定<= Long.Max ,另外也要根据参数mapreduce.input.fileinputformat.split.maxsize=):

long maxSize = getMaxSplitSize(job);

根据参数

getMinSplitSize(job):这个值的参数是mapreduce.input.fileinputformat.split.minsize,然后在下面的配置文件中找到,是0。

C:\Users\yawei.chen\Desktop\Puck\Hadoop\安装包\hadoop-2.7.6\share\doc\hadoop-project\hadoop-mapreduce-client\hadoop-mapreduce-client-core\mapred-default.xml

 

  • 能否切片条件判断

 *压缩文件不能切片。 下面的函数用于判断文件是否为压缩,如果不是则返回true,可以切。

  • 根据block大小,去判断切片大小

 

计算法则

块大小

long blockSize = file.getBlockSize();

 

切片大小

long splitSize = this.computeSplitSize(goalSize, minSize, blockSize);

相当于在minSplit maxSplit blockSize中间取一个中间值

 computeSplitSize方法

通常情况下,minSplit =1,maxSplit =long.max, blockSize =128M,这时候切片大小是128M。因为HDFS默认的块大小是128M,每个切片都是128M时,正好在一个节点上,此时根据本地优先特例,不需要到其它节点进行网络传输,效率比较高。

假设有的人将maxSplit 设置为1M时,此时切片大小是1M。如果一个128M的文件,需要128个切片去运行。此时Map阶段,如果这些数据同时运算,需要128个节点同时分发128片数据;

如果没有这么多节点,那么单个节点上,会有多个map运行,此时需要依赖其它节点,并行运算。这个时候,就会网络覆盖非常大,对网络带宽的要求非常高,效率不高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值