Hadoop入门(9)--Map-Shuffle-Reduce

本地优化-Combine

定义:

数据经过Map端输出后会进行网络混洗,经Shuffle后
进入Reduce,在大数据量的情况下会造成大量网络开销。
所以可以在本地按照key先进性一轮排序与合并,
再进行网络混洗,这个过程就是Combine

这里写图片描述
大多数情况Combine的逻辑和Reduce的逻辑是一致的
可以认为combine是对本地数据的Reduce操作
这里复用Reduce的逻辑,当然也可以实现Combine类

job.setCombinerClass(MyReduce.class);//设置Combine
job.setReducerClass(MyReduce.class);//设置Reducer

从Map到Reduce阶段

有三个任务分片,map的任务就有3个
这里写图片描述
经过map类处理后,输出到内存缓冲区(默认大小100M),超过一定大小后,文件溢写到磁盘上,按照key分类
这里写图片描述
按照key合并成大文件,减少网络开销
这里写图片描述
所有相同key的数据汇集到一个partition
这里写图片描述
将相同的key value汇聚到一起,
但不计算!!!
这里写图片描述
经过Reduce处理,文件名是固定的
这里写图片描述
partition 、Reduce、输出文件数量相等
这里写图片描述
在一个Reduce中,所有的数据都会被按照key值升序排序,所以如果part食醋胡文件中包含key,那么这个文件一定是有序的

Reduce任务数量

在大数据量的情况下,如果只设置1个Reduce任务,其他节点将被闲置,效率底下
所以将Reduce设置成一个较大的值(max:72)
调节Reduce任务数量的方法
一个节点的Reduce任务数并不像Map任务数那样受多个因素制约

  • 通过参数调节mapred.reduce.tasks(在配置文件中)
  • 在代码中调用job.setNumReduceTasks(int n)方法(在code中)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

oifengo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值