
上QQ阅读APP看书,第一时间看更新
7.1 概述
在MapReduce框架中,Shuffle阶段是连接Map和Reduce之间的桥梁,Map阶段通过Shuffle过程将数据输出到Reduce阶段中。由于Shuffle涉及磁盘的读写和网络I/O,因此Shuffle性能的高低直接影响整个程序的性能。Spark本质上也是一种MapReduce框架,因此也会有自己的Shuffle过程实现。
在学习Shuffle的过程中,通常都会引用HadoopMapReduce框架中的Shuffle过程作为入门或比较,同时也会引用在Hadoop MapReduce框架中的Shuffle过程中常用的术语。下面是网络上描述该过程的经典的框架图,如图7-1所示。

图7-1 Hadoop MapReduce框架中的Shuffle框架
其中,Shuffle是MapReduce框架中的一个特定的阶段,介于Map阶段和Reduce阶段之间。Map阶段负责准备数据,Reduce阶段则读取Map阶段准备的数据,然后进一步对数据进行处理,即Map阶段实现Shuffle过程中的数据持久化(即数据写),而Reduce阶段实现Shuffle过程中的数据读取。
在图7-1中,Mapper端与Reduce端之间的数据交互通常都伴随着一定的网络I/O,因此对应数据的序列化与压缩等技术也是Shuffle中必不可少的一部分。可以根据特定场景选取合适的序列化方式与压缩算法进行调优,在此仅给出相关的配置属性的简单描述,具体见表7-1所示。
表7-1 Shuffle序列化方式与压缩算法的配置属性

可以基于图7-1,抽象地去理解Shuffle阶段的实现过程,但在具体实现上,不同的Shuffle设计会有不同的实现细节。