大数据开发:Spark Shuffle详解

众所周知,Spark计算引擎,是在Hadoop MapReduce的基础之上进行了优化,已达到提升计算性能的目的。Spark与MapReduce一脉相承,在计算当中,也就涉及到Map阶段和Reduce计算。今天的大数据开发分享,我们就来具体讲一讲Spark Shuffle。

Shuffle概念解读

Shuffle最早出现于MapReduce框架中,负责连接Map阶段的输出与Reduce阶段的输入。Shuffle阶段涉及磁盘IO、网络传输、内存使用等多种资源的调用,所以Shuffle阶段的执行效率影响整个作业的执行效率,大部分优化也都是针对Shuffle阶段进行的。
 

大数据学习:Spark Shuffle详解


在Spark作业中,Map阶段的Shuffle称为Shuffle Write,Reduce阶段的Shuffle称为Shuffle Read。

Shuffle Write阶段会将Map Task中间结果数据写入到本地磁盘,而在Shuffle Read阶段中,Reduce Task从Shuffle Write阶段拉取数据到内存中并行计算。

Shuffle Write实现方式

(1)基于Hash的实现(hash-based)

每个Map Task都会生成与Reduce Task数据相同的文件数,对Key取Hash值分别写入对应的文件中。

基于Hash的实现方式的优缺点:

优点:实现简单,小数量级数据处理操作方便。

缺点:产生小文件过多,内存利用率低,大量的随机读写造成磁盘IO性能下降。

(2)基于Sort的实现方式(sort-based)

为了解决基于Hash的实现方式的诸多问题,Spark Shuffle引入了基于Sort的实现方式。基于sort的实现方式,每个Map Task任务生成两个文件,一个是数据文件,一个是索引文件,生成的文件数FileNum=MapTaskNum×2。

基于Sort的实现方式的优缺点:

优点:顺序读写能够大幅提高磁盘IO性能,不会产生过多小文件,降低文件缓存占用内存空间大小,提高内存使用率。

缺点:多了一次粗粒度的排序。

Shuffle Read实现方式

Shuffle Read阶段中Task通过直接读取本地Shuffle Write阶段产生的中间结果数据或者通过HTTP的方式从远程Shuffle Write阶段拉取中间结果数据进行处理。

Shuffle Write阶段基于Hash和基于Sort两种实现方式产生的中间结果数据在Shuffle Read阶段采用同一种实现方式。获取需要拉取的数据信息,根据数据本地性原则判断采用哪种级别的拉取方式。

今天的大数据开发分享,Spark Shuffle详解,以上就为大家做了大致的介绍了。在大数据学习当中,Spark Shuffle要理解透彻,才能对于Spark的计算运行机制有更好的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值