MapReduce的Shuffle 过程

MapReduce的Shuffle 过程

2016年6月14日

0、前言

关于MapReduce已经不是什么新鲜的话题了,这篇博文的主要内容也是笔者在初次接触hadoop生态圈时写下的,现在回看当时生硬的笔记,感觉内容还算完整但是又感觉没什么实在内容,暂且如此,存在的诸多问题待后续补充优化!

1、什么是Shuffle过程

shuffle过程又称洗牌过程,在MapReduce程序中,是介于Map输出和Reduce输入之间的一个过程。因此,又可以将Shuffle过程分为两个阶段,即Map Shuffle阶段和Reduce Shuffle阶段。

MapReduce的完整步骤(图片来源于网络):
这里写图片描述
Shuffle过程示意图:
图片3.png-46.2kB

2、Map Shuffle阶段

简单示意图:
这里写图片描述

(1) map shuffle 将map 输出的结果放入内存。这个内存是一个环形缓冲区。环形缓冲区示意图如第二张图片;

关于环形缓冲区,默认情况下,内存为100MB。这个是可以修改配置的。当内存使用率达到80%时,就会将存储的数据溢写(spill)到本地磁盘目录中。

(2)spill磁盘

Step1 分区操作(partiiton)

决定map输出的数据被哪个reduce任务进行处理。一般有几个分区就有几个reduce task。
例如:对单词进行统计,如果需要区分大小写进行统计。则需要两个reduce task。那么,map task过程中就需要设定划分机制。在内存中开辟亮部分空间,分别存放来自map task的结果,大写字母的单词和小写字母的单词。
image_1al7lpcgqq4e1svd8717gt99c2l.png-36.4kB
Step2 排序操作(sorter)

根据key对分区中的数据进行排序。需要根据数据类型来判断,利用comparetor根据实际情况来编写排序规则。
image_1al7ltmsmn473husk78vdnao32.png-9.3kB
image_1al7m2e4dq0l1ifv1q51u9e1pe33f.png-23kB

Step3 溢写操作(spill)

将内存中的数据写到本地磁盘
当map()处理数据结束以后,会输出很多文件,会将spill到本地磁盘的文件进行合并
image_1al7m53oqtbqa7s194p1obhe243s.png-21.1kB

(3) 合并操作 (merge)
将各个文件中各个分区的数据相同keyde键值对合并在一起,并排序。最后形成一个文件,该文件中各个分区的数据已经完成排序。
(4) 小结 map阶段的执行过程
image_1al7m6dvd4moqmv1qo0nej12du49.png-93kB

3、Reduce Shuffle阶段

简单示意图:
image_1al7cou471hh519h81kh0vf31ae6m.png-6.1kB

(1) 抓取map输出的数据

每个不同的reduce task根据需要执行的任务不同,主动到已经完成的map task的本地磁盘中去抓取自己需要处理的数据。
对数据再次进行以下操作

Step1 合并操作 (merge)
对map生成的数据进行合并 reduce同分区不同时间段输出的数据合并

Step2 排序操作
按照key进行排序存放
例如:
image_1al7d92h8S1lo9ii01q8m11if140h13.png-3.1kB
Step3 分组操作
将相同key的value放在一起,需要使用“比较器comparetor”
得到结果:
image_1al7dassjc9n110n6bc165v1oof1g.png-1.9kB

4、Shuffle过程中的comparetor的作用

在Shuffle过程中,map shuffle和 reduce shuffle过程中的排序、分组、都需要实现comparetor接口

5、MapReduce压缩文件配置

作用:对文件进行压缩,可以减少本地磁盘的读写(IO),同样,在reduce抓取数据时,可以减少的网络数据的读写。

Combiner(可选,是Map端的Reduce操作)
Compress,对Map输出的数据进行压缩。

一般是对map shuffle过程中合并时可以根据情况设置执行combiner.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值