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

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

 ▲ 本章节目的

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

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

⚪ 掌握Hadoop的插件配置;

一、Spark Shuffle详解

1. 概述

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

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

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

 这个数据重新打乱然后汇聚到不同节点的过程就是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值