Open Yikun opened 4 years ago
最近要在Hadoop中做一些和压缩库相关的优化,也借此机会把Hadoop的MapReduce的全流程代码进行了梳理,本篇文章将端到端的梳理一下MapReduce的全流程,并重点关注其中和数据压缩/解压相关的流程。
为了使整个代码的阅读变得有趣,我们先提几个问题作为后续追寻蛛丝马迹的“导火索”:
从上图我们可以看到MapReduce的核心流程如上所示,从用户的Input文件到最终的Output文件,主要经历以下几个阶段:
Split:会将用户的输入文件,进行一些“分割“,在client端进行,逻辑上进行分割,只记录偏移信息。 Map:Split文件信息会在Map阶段进行处理, 调用用户自己定义的Map函数。 环形缓冲区:Map的输出不会直接存在文件里,而是存在环形缓冲区中,攒够了以后再进行落盘。 Spill:从缓冲区落盘的过程叫做spill,也最终会生成多个Spill文件。 Map.out:Spill文件最终会被合并为最终的Map输出。
Shuffle阶段会将Map的输出下载到对应的Reduce的机器上。
Merge:Reduce阶段最开始的时候,会将Map文件进行Merge,形成一个大文件,作为Reduce的输入。 Reduce:Reduce会执行用户自己定义的reduce函数,完成最终的输出。
更多详细的内容可以参考《Hadoop MapReduce Comprehensive Description》 [1] 这篇文章。
目前Hadoop支持的压缩算法共有2大类,一种是可分割的压缩算法,一种是不可分割的压缩算法。而支持的压缩算法的类型有:
[1] Hadoop MapReduce Comprehensive Description: https://0x0fff.com/hadoop-mapreduce-comprehensive-description/
在2020年9月26日,在Apache Hadoop Meetup上,我也分享了更多的技术细节,以及我们实际的性能测试结果:
最近要在Hadoop中做一些和压缩库相关的优化,也借此机会把Hadoop的MapReduce的全流程代码进行了梳理,本篇文章将端到端的梳理一下MapReduce的全流程,并重点关注其中和数据压缩/解压相关的流程。
1. 起点
为了使整个代码的阅读变得有趣,我们先提几个问题作为后续追寻蛛丝马迹的“导火索”:
2. MapReduce的基本流程
从上图我们可以看到MapReduce的核心流程如上所示,从用户的Input文件到最终的Output文件,主要经历以下几个阶段:
1. Map阶段。
Split:会将用户的输入文件,进行一些“分割“,在client端进行,逻辑上进行分割,只记录偏移信息。 Map:Split文件信息会在Map阶段进行处理, 调用用户自己定义的Map函数。 环形缓冲区:Map的输出不会直接存在文件里,而是存在环形缓冲区中,攒够了以后再进行落盘。 Spill:从缓冲区落盘的过程叫做spill,也最终会生成多个Spill文件。 Map.out:Spill文件最终会被合并为最终的Map输出。
2. Shuffle阶段。
Shuffle阶段会将Map的输出下载到对应的Reduce的机器上。
3. Reduce阶段。
Merge:Reduce阶段最开始的时候,会将Map文件进行Merge,形成一个大文件,作为Reduce的输入。 Reduce:Reduce会执行用户自己定义的reduce函数,完成最终的输出。
更多详细的内容可以参考《Hadoop MapReduce Comprehensive Description》 [1] 这篇文章。
3. Hadoop中压缩算法的支持情况
目前Hadoop支持的压缩算法共有2大类,一种是可分割的压缩算法,一种是不可分割的压缩算法。而支持的压缩算法的类型有:
[1] Hadoop MapReduce Comprehensive Description: https://0x0fff.com/hadoop-mapreduce-comprehensive-description/
4.后续
在2020年9月26日,在Apache Hadoop Meetup上,我也分享了更多的技术细节,以及我们实际的性能测试结果: