设置MapReduce的Split大小

因为我们的应用中处理的记录都是固定长度的,就是说所有数据都是由固定长度的记录构成的。这里用recordSize表示一个记录的大小,记录在处理处理过程中要保持完整性,所以在设置Split大小时,开始的实现代码为:

int blockSize = Integer.parseInt(args[0]); //args[0]为输入参数,表示用户希望设置的Split大小

int splitSize = blockSize / recordSize * recordSize;

conf.setLong("mapred.max.split.size",splitSize);

后来发现这样做是有问题的。因为splitSize的计算公式未:

splitSize=max(minSize,min(maxSize,blockSize))

其中blockSize为文件块大小。正确的做法如下:

int blockSize = Integer.parseInt(args[0]); //args[0]为输入参数,表示用户希望设置的Split大小

int splitSize = blockSize / recordSize * recordSize;

conf.setLong("mapred.max.split.size",splitSize);
conf.setLong("mapred.min.split.size",splitSize);

  

转载于:https://www.cnblogs.com/hipercomer/p/4535455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值