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

119 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第6天,在第六节课中主要了解到了大数据Shuffle有关的知识。

Shuffle概述

MapReduce概述

  • Map阶段,是在单机上进行的针对一小块数据的计算过程
  • Shuffle阶段:在map阶段的基础上,进行数据移动,为后续的reduce阶段做准备
  • Reduce阶段:对移动后的数据进行处理,依然是在单机上处理一小份数据

为什么shuffle对性能非常重要

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

总结

  • 在大数据场景下,数据shuffle表示了不同分区数据交换的过程,不同的shuffle策略性能差异较大。
  • 目前在各个引擎中shuffle都是优化的重点,在spark框架中,shuffle是支撑spark进行大规模复杂数据处理的基石。

Shuffle算子

Shuffle算子分类

image.png

Spark中对shuffle的抽象

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

Shuffle Dependency构造

  • Partitioner
  • Aggregator

Shuffle过程

Shuffle实现的发展历程

Hash Shuffle

  • 写数据:每个partion会映射到一个独立的文件
  • 写数据优化:每个partition会映射到一个文件片段

Sort shuffle:写数据

  • 每个task生成一个包含所有partition数据的文件

Shuffle--读数据

  • 每个reduce task分别获取所有map task生成的属于自己的片段

Push Shuffle

为什么需要push shuffle

  • Avg IO size太小,造成了大量的随机IO,严重影响磁盘的吞吐
  • M*R 次度请求,造成大量的网络连接,影响稳定性

Push Shuffle的实现

Magnet实现原理

  • Spark driver组件,协调整体的shuffle操作
  • map任务的shuffle writer过程完成后,增加了一个额外的操作push-merge,将数据复制一份推导远程shuffle服务上
  • magnet shuffle service是一个强化版的ESS。
  • reduce任务从magnet shuffle service接收合并好的shuffle数据

Magnet可靠性

  • 如果Map task输出的Block没有成功push到magnet上,并且反复重试仍然失败,则reduce task直接从ESS上拉取原始block数据
  • 如果Magnet上的block因为重复或者冲突等原因,没有正常完成merge的过程,则reduce task直接拉取未完成merge的block
  • 本质上,magnet中维护了两份shuffle数据的副本