SparkShuffle

  • SparkShuffle概念

reduceByKey会将上一个RDD中的每一个key对应的所有value聚合成一个value,然后生成一个新的RDD,元素类型是<key,value>对的形式,这样每一个key对应一个聚合起来的value。

问题:聚合之前,每一个key对应的value不一定都是在一个partition中,也不太可能在同一个节点上,因为RDD是分布式的弹性的数据集,RDD的partition极有可能分布在各个节点上。

如何聚合?

– Shuffle Write:上一个stage的每个map task就必须保证将自己处理的当前分区的数据相同的key写入一个分区文件中,可能会写入多个不同的分区文件中。

 – Shuffle Read:reduce task就会从上一个stage的所有task所在的机器上寻找属于己的那些分区文件,这样就可以保证每一个key所对应的value都会汇聚到同一个节点上去处理和聚合。

Spark中有两种Shuffle管理类型,HashShufflManager和SortShuffleManager,Spark1.2之前是HashShuffleManager, Spark1.2引入SortShuffleManager,在Spark 2.0+版本中已经将HashShuffleManager丢弃。


HashShuffleManager

  • 普通机制
  • 普通机制示意图

  • 执行流程
  1. 每一个map task将不同结果写到不同的buffer中,每个buffer的大小为32K。buffer起到数据缓存的作用。
  2. 每个buffer文件最后对应一个磁盘小文件。
  3. reduce task来拉取对应的磁盘小文件。
  • 总结
  1. .map task的计算结果会根据分区器(默认是hashPartitioner)来决定写入到哪一个磁盘小文件中去。ReduceTask会去Map端拉取相应的磁盘小文件。
  2. .产生的磁盘小文件的个数:

M(map task的个数)*R(reduce task的个数)

  • 存在的问题

产生的磁盘小文件过多,会导致以下问题:

  1. 在Shuffle Write过程中会产生很多写磁盘小文件的对象。
  2. 在Shuffle Read过程中会产生很多读取磁盘小文件的对象。
  3. 在JVM堆内存中对象过多会造成频繁的gc,gc还无法解决运行所需要的内存 的话,就会OOM。
  4. 在数据传输过程中会有频繁的网络通信,频繁的网络通信出现通信故障的可能性大大增加,一旦网络通信出现了故障会导致shuffle file cannot find 由于这个错误导致的task失败,TaskScheduler不负责重试,由DAGScheduler负责重试Stage。

  • 合并机制
  • 合并机制示意图

  • 总结

产生磁盘小文件的个数:C(core的个数)*R(reduce的个数)



SortShuffleManager

  • 普通机制
  • 普通机制示意图

  • 执行流程
  1. map task 的计算结果会写入到一个内存数据结构里面,内存数据结构默认是5M
  2. 在shuffle的时候会有一个定时器,不定期的去估算这个内存结构的大小,当内存结构中的数据超过5M时,比如现在内存结构中的数据为5.01M,那么他会申请5.01*2-5=5.02M内存给内存数据结构。
  3. 如果申请成功不会进行溢写,如果申请不成功,这时候会发生溢写磁盘。
  4. 在溢写之前内存结构中的数据会进行排序分区
  5. 然后开始溢写磁盘,写磁盘是以batch的形式去写,一个batch是1万条数据,
  6. map task执行完成后,会将这些磁盘小文件合并成一个大的磁盘文件,同时生成一个索引文件。
  7. reduce task去map端拉取数据的时候,首先解析索引文件,根据索引文件再去拉取对应的数据。
  • 总结

产生磁盘小文件的个数: 2*M(map task的个数)


  • bypass机制
  • bypass机制示意图

  • 总结
  • .bypass运行机制的触发条件如下:

shuffle reduce task的数量小于spark.shuffle.sort.bypassMergeThreshold的参数值。这个值默认是200。

  • .产生的磁盘小文件为:2*M(map task的个数)

Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager相关推荐

  1. 大数据Hadoop、Hive、Kafka、Hbase、Spark等框架面经

    大数据组件 学习路线: 阶段1:学习绿色箭头的知识点: 阶段2:学习红色箭头的知识点: 阶段3:学习蓝色箭头的知识点: 1 Hadoop 1.1 Hadoop1.x与Hadoop2.x的区别 1.2 ...

  2. 2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作

      目录 RDD.DF.DS相关操作 SparkSQL初体验 SparkSession 应用入口 获取DataFrame/DataSet 使用样例类 指定类型+列名 自定义Schema ​​​​​​​ ...

  3. Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver

    [TOC] 实时WordCount案例 主要是监听网络端口中的数据,并实时进行wc的计算. Java版 测试代码如下: package cn.xpleaf.bigdata.spark.java.str ...

  4. Spark Machine Learning 03 Spark上数据的获取、处理与准备

    Chap 03 Spark上数据的获取处理 Spark上数据的获取.处理与准备 MovieStream,数据包括网站提供的电影数据.用户的服务信息数据以及行为数据. 这些数据涉及电影和相关内容(比如标 ...

  5. Spark、Flink、CarbonData技术实践最佳案例解析

    当前无论是传统企业还是互联网公司对大数据实时分析和处理的要求越来越高,数据越实时价值越大,面向毫秒~秒级的实时大数据计算场景,Spark和Flink各有所长.CarbonData是一种高性能大数据存储 ...

  6. SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid

    转自infoQ! 根据 O'Reilly 2016年数据科学薪资调查显示,SQL 是数据科学领域使用最广泛的语言.大部分项目都需要一些SQL 操作,甚至有一些只需要SQL. 本文涵盖了6个开源领导者: ...

  7. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看

    简介 大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才 ...

  8. Spark RDD概念学习系列之rdd持久化、广播、累加器(十八)

    1.rdd持久化 2.广播 3.累加器 1.rdd持久化 通过spark-shell,可以快速的验证我们的想法和操作! 启动hdfs集群 spark@SparkSingleNode:/usr/loca ...

  9. 实时流处理框架Storm、Spark Streaming、Samza、Flink,孰优孰劣?!

    https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247486490&idx=1&sn=e25a05be8cf98c ...

最新文章

  1. 登陆窗体显示动态效果
  2. easyui收派标准客户端表单校验
  3. 开放下载!《阿里云存储白皮书》全面解读阿里云存储二十年的技术演进
  4. Oracle 分区表(一)
  5. PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
  6. Product Distribution chain id F4 value help的实现
  7. input鼠标事件(快捷手册)
  8. 【Java】 定时任务Timer与ScheduledExecutorService的区别
  9. POP介绍与使用实践(快速上手动画)
  10. 图像的三次B样条插值原理与C++实现
  11. 基本初等函数导数公式表
  12. swarm bzz 安装0.5.3版本基础解析。
  13. MySql 查询比其中某一位讲师工资少的教师姓名、工资和职称
  14. webstorm中使用nodemon
  15. 利用LabVIEW开发应变量测试
  16. 【宇麦科技】盘点2022:企业网络安全的七大成功要素
  17. 为什么我要现在复习学习数据结构和算法
  18. 托福100分什么水平
  19. 码分多址(CDMA)通信原理
  20. cf 985E Pencils and Boxes

热门文章

  1. CodeForces - 916D Jamie and To-do List(主席树+模拟)
  2. 牛客多校2 - Greater and Greater(bitset优化暴力)
  3. POJ - 3714 Raid(平面最近点对模板题,几何)
  4. STL 之includes,set_intersection,set_union,set_difference,set_symmetric_difference
  5. Netty HTTP on Android
  6. 第50讲:Scrapy 部署不用愁,Scrapyd 的原理和使用
  7. kubeadm reset后安装遇到的错误:Unable to connect to the server: x509: certificate signed by unknown authority
  8. 深入浅出 Linux 惊群:现象、原因和解决方案
  9. 【今晚七点半】:白板与开源
  10. LiveVideoStackCon 2022 上海站 专题抢先看(3)