Shuffle| 字节青训营

152 阅读1分钟

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

Shuffle概述

  • MapReduce存在 Map、Shuffle、Reduce三个阶段
    • Map阶段,在单机上进行的针对一小块数据的计算过程
    • Shuffle阶段,在map阶段的基础上,进行数据移动,为后续的reduce阶段做准备
    • Reduce阶段,对移动后的数据进行处理,仍然是在单机上处理一小份数据
  • 为什么Shuffle对性能非常重要?
    • M * R 次网络连接
    • 大量的数据移动
    • 数据丢失风险
    • 可能存在的大量的排序操作
    • 大量的数据序列化、反序列化操作
    • 数据压缩

目前各个引擎中的shuffle都是优化的重点,在spark框架中,shuffle是支撑spark进行大规模复杂数据处理的基石。

Shuffle算子

  • repartition

    • coalesce、repartition
  • ByKey

    • groupByKey、reduceByKey、aggregateByKey、combineByKey、sortByKeysortBy
  • Join

    • cogroup、join
  • Distinct

    • distinct 可以看成特殊的分区操作

image.png

Spark 算子会shuffle是因为产出了数据移动

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

image.png

Shuffle过程

Write 实现

UnSafeShuffleWriter

SafeShuffleWriter

Read 实现

网络时序图

Push Shuffle