mapreduce中map数量计算

mapreduce作业会根据输入目录产生多个map任务通过多个map任务并行执行来提高作业运行速度但如果map数量过少并行量低作业执行慢如果map数过多资源有限也会增加调度开销因此根据输入产生合理的map,为每个map分配合适的数据量能有效的提升资源利用率并使作业运行速度加快.

 

假设put一个160M的文件到HDFS上,blockSize为默认的64M,那么该文件在HDFS上会分成3个block保存。

mapper的数量是由输入的分片决定的。默认情况下输入的分片和block的数量一样,计算公式为:splitSiz=Math.max(minSize,Math.min(maxSize,blockSize));

mapred.min.split.size设置minSize,mapred.max.split.size设置maxSize,minSize默认为1,maxSize默认为Long.MAX_VALUE?

 

所以默认情况下用该文件作为mapreduce的输入文件的话,160/64=3,会生成3个mapper用来处理输入。

按照这个公式,若想减少分片的数量,那么可以增大minSize,比如将minSize改为80,160/80=2,只会产生2个分片即两个map.

若想增加分片的数量,那么可以减小maxSize,比如将maxSize改为32,160/32=6,产生6个分片即6个map.

 

每个文件是单独分片的,比如两个文件一个65M,一个129M,第一个文件默认分成了64,1,第二个分成64,64,1,剩下的第一个文件的1M碎片和第二个文件的1M碎片再合并成一个分片,总共4个分片即4个map.

一个job的总map数量是可以控制的,每个节点上的map数量也是可以控制的.

 

简单来讲就是切分的原则是splitSize不会小于minSize,不会大于maxSize,如果blockSize能够满足以上要求就取blockSize,如果不能的话就在maxSizeminSize中取值

这是我自己的理解,有误请指正.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值