大数据 Shuffle 原理与实践 | 青训营笔记

168 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第6天

1. Shuffle概述

1.1 什么是shuffle?

shuffle的作用就是把map阶段和reduce阶段连接起来,充当一个桥梁的作用。 shuffle只能产生[k,v]类型的PairRDD中,Map端的数据被Reduce端fetch时,是通过key的hashcode分发到每一个Reducer上,此过程被叫做shuffle。

shulle过程中经历磁盘读写和网络传输,这是影响shuffle效率的根本原因。所以要进行shuffle调优。

具体来说shuffle过程中就是将数据从数据在map阶段产生的结果都在不同的机器上,要经过网络传输发送到Reducer上在进行聚合的一个过程。发生网络传输个过程也叫shuffle。

下个stage向上个stage要数据的过程被叫做shuffle。

RDD角度:sparkRDD模型中将数据分为partion,这些partion分发在不同的机器上,分区之间通过网络传输交换数据,分区的函数无法满足执行函数的要求,比如reducebykey等,需要重新进行聚合,这个过程也被叫叫做shuffle。

1.2 为什么shuffle如此重要

  • M·R次网控连接
  • 大量的数据移动
  • 数据丢失风险
  • 可能存在大量的排序操作
  • 大量的数据序列化、反序列化接作
  • 数据压缩

2. Shuffle算子

2.1 常见的触发shuffle的算子

  1. repartition

    coalesce、repartition

  2. ByKey

    groupByKey、reduceByKey、aggregateByKey、combineByKey、sortByKeysortBy

  3. Join

    cogroup、join

  4. Distinct image.png

  • 算子使用例子
val text = sc.textFile("mytextfile.txt")
val counts = text
  .flatMap(line => line.split(" "))
  .map(word => (word,1))
  .reduceByKey(_+_)
counts.collect

2.2 Spark中对shuffle的抽象

  • 宽依赖:父RDD的每个分片至多被子RDD中的一个分片所依赖
  • 窄依赖:父RDD的分片可能被子RDD中的多个分片所依赖

3. shuffle过程

  • spark中的shuffle变迁过程

    • HashShuffle

      • 优点:不需要排序
      • 缺点:打开,创建的文件过多
    • SortShuffle

      • 优点:打开的文件少、支持map-side combine
      • 缺点:需要排序
    • TungstenSortShuffle

      • 优点:更快的排序效率,更高的内存利用效率
      • 缺点:不支持map-side combine
  • Register Shuffle

    • 由action算子触发DAG Scheduler进行shuffle register
    • Shuffle Register会根据不同的条件决定注册不同的ShuffleHandle

image.png

3. Push Shuffle

3.1 为什么需要Push Shuffle

问题:

  • 数据存储在本地磁盘,没有备份
  • IO 并发:大量 RPC 请求(M*R)
  • IO 吞吐:随机读、写放大(3X)
  • GC 频繁,影响 NodeManager

3.2 各公司优化思路

总结

在这节课中我学习了:

  1. spark中的shuffle算子:spark中的会产生shuffle的算子,了解了其基本特性;
  2. spark中的shuffle过程:spark中shuffle的核心原理和实现细节;
  3. Push based shuffle:push shuffle社区的实现方案以及字节的实现方案;

参考

  1. 【大数据专场 学习资料二】第四届字节跳动青训营 - 掘金 (juejin.cn)
  2. Apache Spark™ - Unified Engine for large-scale data analytics
  3. apache/spark: Apache Spark - A unified analytics engine for large-scale data processing (github.com)