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

100 阅读1分钟

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

以下是我对课上所做笔记的一些整理。

shuffle

MapReduce工作原理

map-shuffle-reduce image.png

为什么shuffle是优化的重点?

image.png

shuffle 算子

会产生shuffle的算子的分类

  • repartition repatition、coalesce

  • ByKey xxByKey

  • join cogroup、join、leftOuterJoin、intersection、substract、subtractByKey

  • Distinct

应用————以wordcount为例

image.png

宽依赖 窄依赖——spark对shuffle的抽象

image.png

shuffle dependency 源码剖析

partitoner

image.png

Aggregator

image.png

shuffle发展历程及其设计思想

写:

hash shuffle

优化处理:每个partiton映射到一个文件片段

sort shuffle

排序会消耗cpu资源,但是每个task生成一个包含所有partiton数据的文件

image.png

读:

shuffle读数据

image.png

shuffle handler与writer的对应关系

image.png

BypassMergeShuffleWriter

image.png

UnsafeShuffleWriter

image.png 为什么是unsafe? ——————用了堆外内存。

堆外内存的管理 image.png

  • 为什么需要限制partition数量不超过2^24次方? 因为Long Array的前24位bit用于记录partition,超过就溢出了。

sortshufflewriter 放在堆内

image.png

Reader实现——网络时序图

image.png

ShuffleBlockFetchIterator

image.png

shuffle优化使用的技术:Netty zero copy

好处:

image.png

常见问题

image.png

shuffle优化

避免shuffle

  • 使用broadcast代替join

image.png

  • 使用可以map-side预聚合的算子

image.png

参数优化

image.png

倾斜优化

  • 提高并行度

image.png

  • Spark AQE Skew join AQE将倾斜的分区打散,对各个小分区join

image.png

Push shuffle

Magnet Push Shuffle

实现原理:

image.png

image.png

Cloud shuffle service

设计思想:

image.png

架构图

image.png

写入和读取流程

(红框为写入,绿框为读取)

image.png

AQE

  • 在聚合文件时主动将文件切分为若干块,当触发AQE时,按照已经切分好的文件块进行拆分。
  • 一个partition会对应多个epoch file,截至目前,单个epoc的大小是512MB。

image.png