Spark学习笔记【shuffle】

news/2024/10/31 1:31:37/

本文基本上是大数据处理框架Apache Spark设计与实现的Shuffle部分的学习。以及Spark基础知识@Bambrow

Shuffle解决啥问题

上游和下游,不同stage,不同的task之间是如何传递数据的。ShuffleManager管理ShuffleWrite和ShuffleRead

分为两个阶段:

ShuffleWrite
上游stage输出的分区问题。

ShuffleRead
下游stage从上游获取数据,组织数据的问题

涉及到三个操作:

分区
分区是为了让reduce task可以获取相应的数据。
排序
有些算子需要进行排序。比如sortBy().可以在Shuffle机制中,完成排序。
聚合
相同key的结构放到一起,进行计算。
Map端聚合,可以减少Shuffle网络传输。

Shuffle框架的设计和实现

ShuffleWrite

HashShuffleManager(Spark2.0移除):
哈希的方式决定Map端分区文件写入,临时文件命名为shuffle_“+shuffleId+”“+mapId+”"+reduceId,文件公用,追加写入。
缺点在于:
1,临时文件过多(R*C),随机写性能差。
2.写缓冲内存过大。
consolidate 机制可以重用文件,减少临时文件数。

它主要关注的点在于Map端的分区,聚合。

SortShuffleManager
在这里插入图片描述
分区,MapTask写缓冲区,Partition内不排序(MR对内按照Key进行排序),溢写文件。完成之后,使用ExternalSorter对临时文件进行排序,合并成一个大文件和索引文件。

数据结构

ShuffleRead

跨节点获取数据,聚合和排序。

谁启动ReadTask,启动多少个线程?

和Hadoop的对比

Shuffle write 排序
Shuffle write 文件数目
Shuffle read 多线程拷贝
read聚合排序 MR归并(已经分区内部有序了),哈希归并(按key哈希)

参考文档

spark源码之shuffleManager


http://www.ppmy.cn/news/60349.html

相关文章

互联网陪诊系统功能方案

互联网陪诊系统是一款为用户提供陪同患者到医院就医全程陪同,排队约号,排队检查,排队缴费,取送结果,代办买药,代办问诊等。 业务线上预约平台,让客户享受到最为专业的医院助医服务. 功能介绍 专…

mysql设置用户权限

更改mysql密码 -- 查询用户权限 show grants for root%; update mysql.user set authentication_stringpassword(密码) where userroot and Host localhost; flush privileges; -- 或者下面方式 alter user test1localhost identified by 新密码; flush privileges;创建用户 …

基于PyQt5的图形化界面开发——模拟医院管理系统

基于PyQt5的图形化界面开发——模拟医院管理系统 0. 前言1. 需求分析2. 挂号界面的思路、UI界面代码及相应触发函数2.1 思路分析2.2 ui_guahao.py2.3 相应的触发函数代码 3. 就诊界面的思路、UI界面代码及相应触发函数3.1 思路分析3.2 ui_jiuzhen.py3.3 相关触发函数&#xff1…

redis和memcache区别

1redis做存储,可以持久化,memcache做缓存,数据易丢失。 2 redis支持多数据类型,memcache存放字符串。 3 redis服务端仅支持单进程、单线程访问,也就是先来后到的串行模式,避免线程上下文切换,…

程序员崩溃的N个瞬间

说到程序员,在外界眼里,他们是掌控代码的大神,他们是改变世界的王者。其实程序员的工作不容易,不信,就来看看程序员崩溃的各种瞬间—— 01、公司实习生找bug 02、在调试时,将断点设置在错误的位置 03、当我…

【网络代理详解:原理、类型及应用】

在互联网世界中,网络代理是一种常用的技术手段,可以帮助我们在访问网络资源时保护隐私、绕过地域限制等。本文将详细介绍网络代理的原理、类型及应用,让我们一起来了解这个神秘而实用的网络技术。 一、网络代理定义与基本原理 定义 网络代…

ginbuilder 工具快速创建

ginbuilder github 地址 快速创建一个ginweb项目: 目前apps下只有http服务,如果后续有需要的话,会添加上rpc服务,websocket服务后边如果有需要会添加上swagger 创建完成的目录结构 ├── apps │ ├── apis // 所有的apis…

Arduino_STM32 之Arduino IDE开发配置

前言 由于选了物联网作为选修课,老师喜欢使用Arduino进行编程,但是也要教我们使用STM32。于是他就让我们使用Arduino IDE开发STM32(用Keil 不好吗???)。 第一章 软件下载 安装Arduino IDE&…