大数据技术专题篇MapReduce shuffle过程详解
Posted 大数据漫路求索
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据技术专题篇MapReduce shuffle过程详解相关的知识,希望对你有一定的参考价值。
一、文章概述
互联网大数据仓库一般基于开源软件Hadoop和Hive进行构建,其中计算引擎主要是偏离线计算的MapReduce和偏实时计算的Spark,在执行过程中两者都包含了一个重要过程--shuffle。通过对shuffle过程的分析,进一步了解如何优化shuffle过程,提高系统执行效率。本文重点介绍MapReduce的Shuffle过程。
二、Shuffle过程介绍
MapReduce的Shuffle过程介绍
MapReduce的shuffle过程是把一组无规则的数据转化成一组有一定规则的数据。MapReduce有两个重要的阶段:Map负责数据的过滤分发;Reduce负责数据的计算归并。Map的数据输出是Reduce过程的数据输入,Reduce需要通过shuffle过程获得数据。
从Map的输出到Reduce输入的整个过程成为广义的shuffle过程。真正的Shuffle包括Map和Reduce两个阶段,包括Map端的Spill过程,Reduce端的copy和sort过程。
Spill过程
Spill过程包括输出、排序、溢写、合并等步骤。
Collect
每个Map任务不断的把数据以<key,value>形式输出到内存中的环形缓冲区kvbuffer中。kvbuffer中不仅设置了<key,value>数据,还设置了一些索引数据,给放置索引数据的区域叫做kvMeta。<key,value>数据区域和索引数据区域在kvbuffer中是相邻不重叠的两个区域,用一个分界点来划分两者,分界点会在spill之后更新一次。
如果kvbuffer写满到一定程度时,比如80%就开始spill,在spill的同时,Map任务还会继续写数据。
Spill这个过程是由Spill线程承担,Spill线程在接到Map任务的指令的时候就开始正式工作(SortAndSpill),不仅仅是Spill,在Spill之前还有一个颇为争议的Sort。
Sort
先把kvbuffer中的数据按照partition值和key两个关键字进行升序排列,移动的只是索引数据,排序的结果是kvMeta中的数据按照partition为单位聚集在一起,同一partition内的数据按照key有序。
Spill
Spill线程为会为Spill过程创建一个磁盘文件,根据排过序的kvMeta挨个partition的把<key,value>数据写到文件中,逐个partition的写到文件。
虽然是按照顺序逐个存放到文件中,但是是如何知道某个partition在文件的哪个位置呢?有一个三元组记录某个partition对应的数据在这个文件中的索引:起始位置、原始数据长度、压缩之后的数据长度,一个partition对应一个三元组。
Merge
通常Map任务数据的数据量很大,会有好几次spill,数据文件和索引文件会生成的很多,分布在不同的磁盘上。最后需要把这些零散的文件Merge到一起。
Merge过程是从所有的本地目录上扫描产生的spill数据文件,然后把文件的目录存储在一个数组中。同理,也是从所有的本地文件中查找所有的index文件,并把它存储到列表里面。最后再逐个partition的合并输出。
Map端的shuffle过程全部结束。
Copy
Reduce任务通过HTTP协议向各个Map任务拖取它所需要的数据。每个节点都会启动一个常驻的HTTP Server,其中一项任务就是响应Reduce端拖取Map数据。
Reduce向每个Map去拖取数据,在内存中每个Map对应一块数据,当内存中的Map数据达到一定的占比时,开始启动内存中的merge,然后输出到硬盘上的一个文件中。
有些Map的数据较小可以放在内存中,有些Map数据很大需要放在硬盘上,这样最后需要有个全局的合并操作,把所有的数据合并到硬盘上。
Merge sort
这里面使用的merge和Map端的merge过程一样。Map端输出的数据已经是有序的了,Merge进行一次合并排序,Reduce端的sort就是进行这个操作,在copy的同时进行sort操作。
Reduce端的shuffle过程到此结束。
以上是关于大数据技术专题篇MapReduce shuffle过程详解的主要内容,如果未能解决你的问题,请参考以下文章
大数据技术之_05_Hadoop学习_02_MapReduce_MapReduce框架原理+InputFormat数据输入+MapReduce工作流程(面试重点)+Shuffle机制(面试重点)(示例
大数据之Hadoop(MapReduce): MapReduce框架原理