六、【计算】大数据Shuffle原理与实践(上) | 青训营笔记

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 六、【计算】大数据Shuffle原理与实践(上) | 青训营笔记

 👉引言💎


学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 热爱写作,愿意让自己成为更好的人............

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉


概述


学习目标:

  1. 了解spark中shuffle的发展历史以及主要实现机制。包括如何划分stage、partition分区、spill、combine等。
  2. 了解spark shuffle的底层实现原理以及Push-based shuffle总体架构方案。
  3. 了解shuffle优化,包括实际业务场景下如何避免产生shuffle、减少shuffle数据量、shuffle参数优化等


一、shuffle概述


1 MapReduce


  • 《MapReduce:Simplified Data Processing on Large Clusters》
  • 开源实现中主要分为Map,Shuffle,Reduce三个阶段

image.png


  • 1.1 Map阶段


单机上针对一小块数据的计算过程


image.pngimage.png


  • 1.2 Shuffle阶段


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

image.png


  • 1.3 Reduce阶段
  • 对移动后的数据进行处理,依然是在单机上处理一小份数据image.png


2 Shuffle对性能极为重要


  • 经典shuffle过程

image.pngimage.png

各个引擎中,针对数据shuffle的优化都是重中之重,数据shuffle涉及到以下几个方面:

  • M*R次网络连接
  • 大量的数据移动
  • 数据丢失风险
  • 可能存在大量排序操作
  • 大量数据序列化、反序列化操作
  • 数据压缩
  • 数据shuffle表示了不同分区数据交换的过程,不同的shuffle策略性能差异较大。目前在各个引擎中shuffle都是优化的重点,在spark框架中,shuffle是支撑spark进行大规模复杂数据处理的基石。image.png


二、shuffle算子


1 常见的触发shuffle的算子


  • repartition
  • coalesce、repartition
  • ByKey
  • groupByKey、reduceByKey、aggregateByKey、combineByKey、sortByKeysortBy
  • Join
  • cogroup、join
  • Distinct
  • distinct


2 算子使用例子


Spark源码中RDD的单元测试

PairRDDFunctions的单元测试

val text = sc.textFile("mytextfile.txt")
val counts = text
  .flatMap(line => line.split(" "))
  .map(word => (word,1))
  .reduceByKey(*+*)
counts.collect


3 Spark中对shuffle的抽象


image.png

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


4 Shuffle Dependency算子依赖关系


image.png

  • 创建会产生shuffle的RDD时,RDD会创建Shuffle Dependency来描述Shuffle相关的信息
  • 1 构造函数
  • 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.
  • 2 Partitioner

image.png

  • 用来将record映射到具体的partition的方法
  • 接口
  • numberPartitions
  • getPartition
  • 3 Aggregator
  • 在map侧合并部分record的函数
  • 接口
  • createCombiner:只有一个value的时候初始化的方法
  • mergeValue:合并一个value到Aggregator中
  • mergeCombiners:合并两个Aggregator

🌹写在最后💖: 路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7月前
|
消息中间件 资源调度 大数据
学了1年大数据,来测测你大数据技术掌握程度?大数据综合复习之面试题15问(思维导图+问答库)
学了1年大数据,来测测你大数据技术掌握程度?大数据综合复习之面试题15问(思维导图+问答库)
77 0
|
机器学习/深度学习 分布式计算 大数据
大数据 - MapReduce:从原理到实战的全面指南
大数据 - MapReduce:从原理到实战的全面指南
1409 0
|
存储 人工智能 分布式计算
Hadoop基础学习---1、大数据概论
Hadoop基础学习---1、大数据概论
|
存储 分布式计算 Java
六、【计算】大数据Shuffle原理与实践(中) | 青训营笔记
六、【计算】大数据Shuffle原理与实践(中) | 青训营笔记
六、【计算】大数据Shuffle原理与实践(中) | 青训营笔记
|
存储 分布式计算 大数据
六、【计算】大数据Shuffle原理与实践(下) | 青训营笔记
六、【计算】大数据Shuffle原理与实践(下) | 青训营笔记
六、【计算】大数据Shuffle原理与实践(下) | 青训营笔记
|
存储 分布式计算 Java
大数据 Shuffle 原理与实践|青训营笔记
本文包括:1.shuffle概述;2.spark中的shuffle算子的基本特性;3.spark中的shuffle的过程;4.push shuffle的原理与实现
247 0
大数据 Shuffle 原理与实践|青训营笔记
|
SQL 分布式计算 大数据
七、【计算】Presto架构原理与优化介绍(上) | 青训营笔记
七、【计算】Presto架构原理与优化介绍(上) | 青训营笔记
七、【计算】Presto架构原理与优化介绍(上) | 青训营笔记
|
机器学习/深度学习 SQL 数据采集
数据分析理论与实践 | 青训营笔记
埋点:埋点数据是指上报的记录着触发原因和状态信息的日志数据。按照上报方来看,可以划分为"服务端埋点”和"客户端埋点”,按照上报形式,可以划分为"代码埋点”、“可视化全埋点” 。
167 0
数据分析理论与实践 | 青训营笔记
|
存储 分布式计算 关系型数据库
大数据基础-MapReduce原理及核心编程思想
MapReduce原理及核心编程思想
208 0
|
存储 分布式计算 大数据
大数据Shuffle原理与实践
大数据Shuffle原理与实践
783 0
大数据Shuffle原理与实践