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

120 阅读2分钟

image.png

这是我参与「第四届青训营」笔记创作活动的第7天,笔记的内容是有关青训营课程中的一个分享.

前言

这一次的内容是关于大数据Shuffle的原理,主要是分享Spark中的shuffle算子以及介绍Shuffle。

一、Shuffle概述

讨论Shuffle前我首先介绍一下MapReduce,因为Shuffle是在属于其中一个阶段的。

唉开源实现的MapReduce中,存在Map、Shuffle、Reduce三个阶段。

image.png

Shuffle的阶段是在map阶段的基础上,进行数据移动,为后续的reduce阶段做准备。

image.png

Shuffle对性能的重要性:

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

在目前的大数据场景下,数据Shuffle表示了不同分区数据交换的过程,不同的shuffle策略性能差异较大。

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

二、Shuffle算子

2.1 Shuffle算子分类

Saprk中会产生shuffle的算子大概可以分为4类。

微信图片_20220830152831.png

2.2 Spark中对shuffle的抽象 -宽依赖、窄依赖

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

image.png

2.3 Shuffle Dependency构造 - Partitioner

  • 两个接口
    • numberPartitions
    • getPartition
  • 经典实现
    • HashPartitioner

总结

这一节课对Shuffle宽窄依赖有了清晰的认识,对ShuffleDependency及其相关的组件也有了基本的认识。

常见的shuffle算子在自己的实际操作中遇到了四种中的三种,shuffle对性能的影响也学习到了,对我受益匪浅。