Spark Shuffle机制

Spark Shuffle


  • 在MapReduce框架,Shuffle是连接Map和Reduce之间的桥梁,Map阶段通过shuffle读取数据并输出到对应的Reduce;而Reduce阶段负责从Map端拉取数据并进行计算。在整个shuffle过程中,往往伴随着大量的磁盘和网络I/O。所以shuffle性能的高低也直接决定了整个程序的性能高低。

img

一、HashShuffle机制

1.1 HashShuffle概述

Spark1.6版本之前使用的是HashShuffle。

Spark运行分为两个部分:一是驱动程序,核心是SparkContext;

​ 二是Worker节点上的Task

程序运行的过程中,Driver和Executor进程相互交互,Driver会分配Task到Executor ,Task的数据要从上游的Task抓取。其中下一个Stage向上一个Stage要数据的这个过程就是Shuffle

  • 未优化之前img
  1. 每一个ShuffleMapTask会为每一个ReduceTask创建一个bucket缓存和一个block文件(数据经过HashPartitioner之后找到对应的bucket)
  2. ShuffleMapTask将输出作为MapStatus发送到DAGScheduler的MapOutputTrackerMaster,每一个MapStatus包含每一个ReduceTask要拉去的数据的位置和大小。
  3. ReduceTask利用MapStatus提供的信息,将数据拉取过来。形成一个内部的ShuffleRDD
  • 缺点
  1. 数据量大的时候 会生成M*R个小文件
  2. bucket缓存,要将所有的MapTask的数据写入到bucket才能刷写到磁盘,这样的话可能造成内存溢出;
  • 优化之后img
  1. 每一个Excutor进程根据核数决定Task的并发数
  2. ShuffleMapTask根据Task的数量创建R个bucket,按照key进行hash放到不同的bucket中(每一个bucket中对用一个block)
  3. 下一个Task创建的时候,就不用再创建新的Bucket和Block直接复用之前的就行。
  • 优缺点
  1. 减少了小文件的数量(优点)
  2. 如果Reduce端并行任务过多的话或者是数据分片过多的话,还有有很多的小文件产生
1.2 Sorted-Based Shuffle

目的:缓解Shuffle过程中小文件过多的问题

方法:引入类似于Hadoop的Map-Shuffle机制

  1. 每一个ShuffleMapTask不会创建单独的文件,而是将所有的Task的结果写入到同一个文件,并且生成对应的索引文件。
  2. 之前是所有的数据都要写入到内存(可能出现内存溢出),现在内存写不下的数据可以进行磁盘溢写
  • Sort-Base Shuffle几种不同的策略:BypassMergeSortShuffleWrite。SortShuffleWriter和UnsafeSortShuffleWriter

    1. 对于BypassMergeSortShuffleWriter,使用这个模式特点:
    • 适用于Reducer任务 比较少的情况
    • 适用于处理不需要排序和聚合的Shuffle操作,数据直接写入文件
    • 将每一个分区写入到单独的文件,最后进行合并,减少文件的数量,但是需要并发打开多个文件,对内存的消耗比较大
    1. 对于SortShuffleWriter
    • 适用于数据量很大的场景或者是集群规模很大的场景
    • 引入外部排序器,可以支持在Map端进行本地聚合或者不聚合
    • 外部排序器enable了Spill功能,内存不够用的时候就会将数据溢写到本地磁盘,最后将本地磁盘和内存进行合并
    1. 对于UnsafeShuffleWriter由于需要谨慎使用,我们暂不做分析
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值