微信号:iteblog_hadoop

介绍:每两天一篇关于Hadoop、Flume、Spark、Hbase、Hive、Zookeeper、Mapreduce、HDFS相关的技术博文,大数据技术博客:http://www.iteblog.com,或者Google\百度搜索 过往记忆

一篇文章了解 Hadoop Shuffle 过程

2019-03-13 08:19 冷血狂魔

本文原文(点击下面阅读原文即可进入)https://my.oschina.net/u/1778239/blog/3018432

对于基于 MapReduce 编程范式的分布式计算来说,本质上而言,就是在计算数据的交、并、差、聚合、排序等过程。而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么要想求得某个key 对应的全量数据,那就必须把相同 key 的数据汇集到同一个 Reduce 任务节点来处理,那么 Mapreduce 范式定义了一个叫做 Shuffle 的过程来实现这个效果。

Hadoop 的 Shuffle 过程

Shuffle 描述的是数据从 Map 端到 Reduce 端的过程,大致分为排序(sort)、溢写(spill)、合并(merge)、拉取拷贝(Copy)、合并排序(merge sort)这几个过程,大体流程如下:

    

上图的 Map 的输出的文件被分片为红绿蓝三个分片,这个分片的就是根据 Key 为条件来分片的,分片算法可以自己实现,例如 Hash、Range 等,最终 Reduce 任务只拉取对应颜色的数据来进行处理,就实现把相同的 Key 拉取到相同的 Reduce 节点处理的功能。下面分开来说 Shuffle 的的各个过程。

Map 端做了下图所示的操作:

1、Map 端 sort

Map 端的输出数据,先写环形缓存区 kvbuffer,当环形缓冲区到达一个阀值(可以通过配置文件设置,默认80),便要开始溢写,但溢写之前会有一个 sort 操作,这个 sort 操作先把 Kvbuffer 中的数据按照 partition 值和 key 两个关键字来排序,移动的只是索引数据,排序结果是 Kvmeta 中数据按照 partition 为单位聚集在一起,同一 partition 内的按照 key 有序。

2、spill(溢写)

当排序完成,便开始把数据刷到磁盘,刷磁盘的过程以分区为单位,一个分区写完,写下一个分区,分区内数据有序,最终实际上会多次溢写,然后生成多个文件

3、merge(合并)

spill 会生成多个小文件,对于 Reduce 端拉取数据是相当低效的,那么这时候就有了 merge 的过程,合并的过程也是同分片的合并成一个片段(segment),最终所有的 segment 组装成一个最终文件,那么合并过程就完成了,如下图所示

至此,Map 的操作就已经完成,Reduce 端操作即将登场

Reduce操作

总体过程如下图的红框处:

    

1、拉取拷贝(fetch copy)

Reduce 任务通过向各个 Map 任务拉取对应分片。这个过程都是以 Http 协议完成,每个 Map 节点都会启动一个常驻的 HTTP server 服务,Reduce 节点会请求这个 Http Server 拉取数据,这个过程完全通过网络传输,所以是一个非常重量级的操作。

2、合并排序

Reduce 端,拉取到各个 Map 节点对应分片的数据之后,会进行再次排序,排序完成,结果丢给 Reduce 函数进行计算。

总结

至此整个 Shuffle 过程完成,最后总结几点:

  • Shuffle 过程就是为了对 key 进行全局聚合

  • 排序操作伴随着整个 Shuffle 过程,所以 Hadoop 的 Shuffle 是 sort-based 的

猜你喜欢

欢迎关注本公众号:iteblog_hadoop:

回复 spark_summit_201806 下载 Spark Summit North America 201806 全部PPT

spark_summit_eu_2018 下载 Spark+AI Summit europe 2018 全部PPT

回复 HBase_book 下载 2018HBase技术总结 专刊

0、回复 电子书 获取 本站所有可下载的电子书

1、为什么不建议在 HBase 中使用过多的列族

2、Elasticsearch 6.3 发布,你们要的 SQL 功能来了

3、列式存储和行式存储它们真正的区别是什么

4、分布式原理:一致性哈希算法简介

5、分布式快照算法: Chandy-Lamport 算法

6、Kafka分区分配策略

7、分布式原理:一文了解 Gossip 协议

8、干货 | Apache Spark 2.0 作业优化技巧

9、HBase Rowkey 设计指南

10、HBase 入门之数据刷写详细说明

11、更多大数据文章欢迎访问https://www.iteblog.com及本公众号(iteblog_hadoop)
12、Flink中文文档:
http://flink.iteblog.com
13、Carbondata 中文文档
http://carbondata.iteblog.com

 
Hadoop技术博文 更多文章 要想成为架构师这几点你必须关注! Apache Spark 3.0 将内置支持 GPU 调度,文末有福利 一篇文章搞清楚 HDFS 基本原理 为什么要使用MQ消息中间件? 使用 Alluxio 加速 Spark DataFrame 计算速度
猜您喜欢 sshpass 工程事故与现实世界(续) SparkSQL-有必要坐下来聊聊Join 进入阿里工作后个人的成长变化 安天移动安全公司与泰尔终端实验室正式签署战略合作协议