IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark:Spark Shuffle 之SortShuffle -> 正文阅读

[大数据]Spark:Spark Shuffle 之SortShuffle

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都会汇聚到同一个节点上去处理和聚合。

SortShuffle

1、普通机制

在这里插入图片描述

  • 执行流程
    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的个数)

2、bypass机制

在这里插入图片描述

  • bypass 运行机制的触发条件如下:
    1、shuffle reduce task 的数量小于 spark.shuffle.sort.bypassMergeThreshold 的参数
    值。这个值默认是 200 。
    2、不需要进行 map 端的预聚合,比如 groupBykey , join 。
  • 生成文件个数
    产生的磁盘小文件为: 2*M(map task的个数) 。

Shuffle文件寻址

1、名词解释

  1. MapOutputTracker
    ????MapOutputTracker 是 Spark 架构中的一个模块,是一个主从架构。管理磁盘小文件的地址。
    ????MapOutputTrackerMaster 是主对象,存在于 Driver 中。
    ????MapOutputTrackerWorker 是从对象,存在于 Excutor 中。
  2. BlockManager
    ????BlockManager :块管理者,是 Spark 架构中的一个模块,也是一个主从架构。
    ????BlockManagerMaster ,主对象,存在于Driver中。
    ????BlockManagerWorker ,从对象,存在于Excutor中。
    ????????1. BlockManagerMaster 会在集群中有用到广播变量和缓存数据或者删除缓存数据的时候,通知BlockManagerSlave 传输或者删除数据。
    ????????2. BlockManagerWorker ,从对象,存在于 Excutor 中。
    ????????3. BlockManagerWorker 会与 BlockManagerWorker 之间通信。
    ????无论在 Driver 端的 BlockManager 还是在 Excutor 端的 BlockManager 都含有四个对象:
    ????????1. DiskStore :负责磁盘的管理。
    ????????2. MemoryStore :负责内存的管理。
    ????????3. · :负责连接其他的 BlockManagerWorker 。
    ????????4. BlockTransferService :负责数据的传输。

2、Shuffle 文件寻址流程

1、当map task 执行完成后,会将task的执行情况和磁盘小文件的地址 封装到 MapStatus 对象中,然后由MapOutputTrackerWorker对象向Driver中的MapOutputTrackerMaster汇报
2、在所有的 map task任务执行完毕后,Driver中就掌握了所有的磁盘小文件的地址
3、在reduce task执行之前,会通过Excutor中的MapOutputTrackerWorker向Driver端的MapOutputTrackerMaster获取磁盘小文件的地址。
4、获取到磁盘小文件的地址后,会通过BlockManager中的ConnectionManager连接数据所在节点上的ConnectionManager,然后,通过 BlockTransferService进行数据的传输
5、BlockTransferService默认启动5个task去节点拉取数据。默认情况下,5个task拉取数据量不能超过48M.

至于详细的 任务调度 :可点击查看

over 感谢观看!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:36:19  更:2022-03-12 17:40:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:48:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码