大数据课程K6——Spark的Shuffle详解

文章作者邮箱:[email protected]              地址:广东惠州

 ▲ 本章节目的

⚪ 了解Spark的定义&&特点&&目的&&优缺点;

⚪ 掌握Spark的相关参数配置;

⚪ 掌握Hadoop的插件配置;

一、Spark Shuffle详解

1. 概述

Shuffle,就是洗牌。之所以需要Shuffle,还是因为具有某种共同特征的一类数据需要最终汇聚(aggregate)到一个计算节点上进行计算。这些数据分布在各个存储节点上并且由不同节点的计算单元处理。

以最简单的Word Count为例,其中数据保存在Node1、Node2和Node3。

经过处理后,这些数据最终会汇聚到Nodea、Nodeb处理,如下图所示:

大数据课程K6——Spark的Shuffle详解_第1张图片

 这个数据重新打乱然后汇聚到不同节点的过程就是Shuffle。但是实际上,Shuffle过程可能会非常复杂:

1. 数据量会很大,比如单位为TB或PB的数据分散到几百甚至数千、数万台机器上。

2. 为了将这个数据汇聚到正确的节点,需要将这些数据放入正确的Partition,因为数据大小经常大于节点的内存,因此这个过程中可能会发生多次硬盘续写。

3. 为了节省带宽,这个数据可能需要压缩,如何在压缩率和压缩解压时间中间做一个比较好的选择?

4. 数据需要通过网络传输,因此数据的序列化和反序列化也变得相对复杂。

一般来说,每个Task处理的数据可以完全载入内存(如果不能,可以减小每个Partition的大小),因此Task可以做到在内存中计算。但是对于Shuffle来说,如果不持久化这个中间结果,一旦数据丢失,就需要重新计算依赖的全部RDD。因此有必要持久化这个中间结果。所以这就是为什么Shuffle过程会产生文件的原因。

如果Shuffle过程不落地,①可能会造成内存溢出,②当某分区丢失时,会重新计算所有父分区数据。

2. Shuffle Write

Shuffle Write,即数据时如何持久化到文件中,以使得下游的Task可以获取到其需要处理的数据的(即 Shuffle Read)。在Spark 0.8之前,Shuffle Write是持久化到缓存的,但后来发现实际应用中&#x

你可能感兴趣的:(大数据,spark,分布式)