大数据处理引擎Spark介绍 | 青训营笔记

106 阅读2分钟

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

第六节课「大数据 Shuffle 原理与实践」的内容主要包含 4 个方面:Shuffle 概述、Shuffle 算子、Shuffle 过程、Push Shuffle。这篇文章包括 Shuffle 概述、Shuffle 算子、Shuffle 过程的内容。

Shuffle 概述

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

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

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

Shuffle 算子

  • 常见的触发 shuffle 的算子

    • repartition

      • coalesce、repartition
    • ByKey

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

      • cogroup、join
  • Shuffle Dependency

    • 创建会产生shuffle的RDD时,RDD会创建 Shuffle Dependency 来描述 Shuffle 相关的信息

    • 构造函数

      • A single key-value pair RDD, i.e. RDD[Product2[K, V]],
      • Partitioner (available as partitioner property),
      • Serializer,
      • Optional key ordering (of Scala’s scala.math.Ordering type),
      • Optional Aggregator,
      • mapSideCombine flag which is disabled (i.e. false) by default.
  • Partitioner

    • 用来将 record 映射到具体的 partition 的方法

    • 接口

      • numberPartitions
      • getPartition
  • Aggregator

    • 在map侧合并部分record的函数

    • 接口

      • createCombiner:只有一个 value 的时候初始化的方法
      • mergeValue:合并一个 value 到 Aggregator 中
      • mergeCombiners:合并两个 Aggregator

Shuffle 过程

  • spark中的shuffle变迁过程

    • HashShuffle

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

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

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

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

个人总结

了解了 Shuffle 概述、Shuffle 算子和 Shuffle 过程。

参考