Spark Shuffle概述

来源:互联网 发布:js过滤微信表情符号 编辑:程序博客网 时间:2024/06/15 19:31

概述

介绍Spark Shuffle的概念及三种实现,hash shufflesort shuffletungsten-sort shuffle

Shuffle

Spark 官方文档Shuffle operations部分对Shuffle做了简要介绍。

背景

Spark是分布式计算系统,数据块在不同节点执行,但是一些操作,例如join,需要将不同节点上相同的Key对应的Value聚集到一起,Shuffle便应运而生。

影响

Shuffle是昂贵的操作,首先其涉及到网络IO,此外,Spark中Shuffle是一定落磁盘的,所以又涉及到磁盘IO。Spark默认使用32KB的memory buffer存储Shuffle的中间结果,如果buffer满了就会写入磁盘,生成一个小文件,每个Partition的多个小文件会在map端处理结束后合并为一个大文件,这些临时文件会在对应的application结束后被删除。

Hadoop MapReduce

提到Shuffle不得不提Mapreduce,其一,Mapreduce是我接触的第一个分布式计算模型,相信对很多人也是如此,其实现很经典。其二,学习了Spark的Shuffle之后,Spark sort shuffle的流程和MapReduce一模一样,细微不同之处在于sort shuffle中sort是可选的,因此,懂了MapReduce也就是懂了Spark sort shuffle。

这里写图片描述
上图描述了MapReduce的过程,大致如下

  1. read、compute and buffer in memory
    map task读取数据,计算并将数据存储在内存。
  2. sort、spill to disk and merge
    内存不足,数据溢写到磁盘,溢写的数据是已经sort的,最后对溢写的磁盘数据再进行一次merge sort。
  3. reduce fetch data and merge
    reduce task读取map的输出,并进行归并排序。
  4. compute and output
    对归并后的数据进行计算并输出。

对于Mapreduce过程的理解并没有结合源码,定有纰漏之处,大致介绍这个过程是Spark Shuffle的铺垫。

触发Shuffle的操作

分为以下三类

repartition相关 repartition、coalesce *ByKey操作 groupByKey、reduceByKey、combineByKey、aggregateByKey等 join相关 cogroup、join

实现

Spark中先后实现了三个Shuffle算法,如下

接下来分别介绍hash shufflesort shuffletungsten-sort shuffle的实现细节。

hash shuffle

Spark Shuffle之Hash Shuffle

sort shuffle

Spark Shuffle之SortShuffleWriter

tungsten-sort shuffle

Spark Shuffle之Tungsten-Sort

参考:
Shuffle operations
Spark Architecture: Shuffle

1 0
原创粉丝点击