hadoop Combine output records和Reduce input records不相等

Combine output records和Reduce input records不相等。
在这里插入图片描述

Reduce input records表示从map端获取的记录总数,按道理讲这两个数应该相等,但通过日志发现不相等。

经过多次实验,这是由于combiner引起的。

combiner调用几次,何时调用,都是不可控的。

combiner可能在两个地方调用:

①是spill到磁盘文件时,实际上日志统计的是这个combiner的数据;

②是小文件merge到大文件时,这个调用需要满足一定条件,即“min.num.spill.for.combine”对应数值(默认是3)要小于spill的文件数,此处的combiner的数据未被统计,所以导致了二者的不同。

在这里插入图片描述

证明步骤一:如果不使用combiner,则效果如下,reduce的输入就是map的输出数。

在这里插入图片描述

证明步骤二:调整参数,让merge时不要combiner

如果分片数小于“min.num.spill.for.combine”,则不会触发merge时的combiner。

  • 第一种思路,把“min.num.spill.for.combine”调大,但不起作用。

  • 第二种思路,把分片变小,让spill次数为1,如下配置控制分片最大为30M,不配置的话则为hdfs默认block大小128M,如果分片大小为128M,大于环形缓冲区的大小80M,可能会多次溢出。

    conf.set(“mapreduce.input.fileinputformat.split.maxsize”,“34108884”);

通过这个参数将分片变下,远小于环形缓冲区的大小(80M),则每个map task只会溢出一次,也只会在溢出时combiner。这样调整之后发现,reduce的输入数和combiner的输出数相等了。

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值