SparkSQL之ShuffleManager介绍

1、Shuffle概念

shuffle是spark中数据重分发的一种机制,以便于在跨分区进行数据的分组。
shuffle通常会引起executor与节点之间的数据复制,这期间会有大量的网络I/O,磁盘I/O和数据的序列化。这使得shuffle操作十分地复杂和昂贵。
在shuffle内部,单个map tasks的结果被保存在内存中,直到放不下为止。然后,根据目标分区对它们进行排序,并将它们写入单个文件。在reduce端,tasks会读取相关的经过排序的数据块。
shuffle还会在磁盘上产生大量的中间文件,这样做是为了当触发重算的时候这些中间文件不用被重新创建。垃圾收集可能会发生在很长的一段时间之后,如果应用程序保留了对这些RDD的引用,或者垃圾收集不经常启动的话。这意味着对于一个运行时长较长的spark作业,它可能会消耗大量的 磁盘空间。这些中间文件的存储目录在配置Spark Context时由spark.local.dir参数明确指定。

2、ShuffleManager的发展

  • ShuffleManager: 负责整个shuffle过程的管理与计算。
    Spark 1.2之前,使用HashShuffleManager,在2.0就没了。1.6开始使用SortShuffleManager

  • HashShuffleManager(已经废弃)
    Spark 1.2之前,分为未优化的和优化后的两大类。
    该管理器会产生大量的中间磁盘文件,以及大量的磁盘IO操作影响了性能。
    未经优化的HashShuffleManager:磁盘文件=mapreduce
    经优化的HashShuffleManager:只是开启一个参数;磁盘文件=executor
    reduce

  • SortShuffleManager
    普通机制:磁盘文件:2map 一个数据文件一个索引文件
    bypass机制:磁盘文件:2
    map 一个数据文件一个索引文件
    bypass机制就是普通机制基础上去掉排序。
    开启条件:
    shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值。
    不是map端预聚合的shuffle算子,比如重分区算子等就不会聚合。

未经优化的HashShuffleManager
在这里插入图片描述
经过优化的HashShuffleManager
在这里插入图片描述
SortShuffleManager普通机制
在这里插入图片描述
SortShuffleManager的bypass机制
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值