spark学习2:spark运行基本架构

2023-10-30

各个名词介绍:

1.RDD  -弹性分布式数据集

2.DAG -有向无环图

反应各RDD之间关系,即把第一个RDD和最后一个RDD 串联起来的关系图。

根据DAG 能够找到每个RDD的父RDD

3.executor 

executor是 驻守在各个工作节点中的一个进程,负责生成线程 来执行分配给该工作节点的任务

4.application

程序员编写的一整个代码文件,比如一个 wordcount 代码文件

5.任务

executor派生出的一个个 线程,每一个线程处理一个任务

Job=多个stage,Stage=多个同种task

6.作业

一个application 会被且分为多个 作业,每个作业 又会被且分为 多个任务子集 也叫阶段stage, 每个阶段又被分为 很多个 任务, 每个任务被分配到多个工作节点上 执行

一个作业包含了 多个RDD 以及对RDD的操作

Job=多个stage,Stage=多个同种task

7.sparkContext

存在于 Driver 节点中,相当于在指挥所中的 指挥官

sparkcontxt 在收到application后 , 负责向资源管理器申请资源

然后切分作业,

2.spark运行架构:

主要分为3部分:Driver 节点、  资源管理器节点、工作节点

执行顺序:

3.spark运行大致流程

1.  sparkContext会根据  对RDD的操作 生成DAG图

首先用户提交的代码 会提交到Driver端中,Driver端(相当于一个指挥所)会生成一个sparkContext(相当于一个指挥官)

那么 sparkContext 会根据提交的代码,(这些代码其实就是对RDD的操作), 生成DAG有向无环图, 记录了上游到下游 各RDD之间依赖关系和对每个RDD的操作。

所以DAG中包含了两部分内容,第一部分,整个RDD的依赖关系,即从第一个到最后一个RDD串联起来的关系图,根据这个可以找到每个RDD的父RDD。

第二部分,记录了对每个RDD 的操作,比如是 转换操作Transformation 或 动作操作Action.

2.生成好的DAG会被发送给  DAG schedule

DAG schedule 会干两件事情,切分job  和 切分stage

DAG schedule 会把DAG 切分成不同的job(也就是分为不同的作业)(每遇到一个Action算子操作,就切分一个作业Job )

每个Job中包含很多stage, 相当于一个个子作业(每遇到一个宽依赖就切分stage,根据shuffle切分),stage中包含了很多的任务,是一个任务集合,所以stage 也是一个  task set  集合

Job=多个stage,Stage=多个同种task

3.生成好的task 会被提交给 task schedule

task schedule 会负责具体把任务,分配到 哪个工作节点上去

在这个过程中 task schedule 并不是直接把 任务 扔给工作节点,而是各个工作节点向task schedule 申请/请求任务。

那么task schedule会 根据“计算向数据靠拢”原则, 把任务分给对应的工作节点。 即 数据储存在哪个工作节点work node上,就把这部分数据相关的计算 任务,分给该work node,完成本地化处理。

task scedule 找到最优工作节点后,会把任务分配过去,其实就是 我们编写的那些 对RDD操作的 代码传过去。

4.work node 上的 executor  执行完任务后,会把结果返回给 task schedule 

然后 task schedule  再返回给 DAG schedule  ,然后 DAG schedule 再返回给 SparkContext,由sparkContext 最后把结果返回给用户,或写入HDFS或其他存储中去。

ps:在整个过程中,sparkContext 是用户操作和 集群,建立连接的 一个通道

4.DAG schedule 如何划分stage 阶段的

DAG schedule 划分的主要依据是 各个RDD之间的依赖关系,  有两种依赖关系:宽依赖和窄依赖

如果是宽依赖 那就切分stage

如果是窄依赖 不切分

什么是宽依赖 和 窄依赖:

RDD之间是 宽依赖 或 窄依赖 主要看  两个RDD之间 有没有shuffle  即洗牌操作

如果从父RDD 到子RDD的时候 ,发生了 shuffle ,那么这两个 RDD就是 宽依赖, 那就会被DAG schedule 切分为两个 stage 阶段/作业

如果 父RDD 到子RDD的时候,没发生shuffle  ,那么是窄依赖, 不会切分 stage 

什么是 shuffle 操作:

shuffle 中文意思是 洗牌,

那么对数据进行 打散重新分配,这个过程其实就是shuffle

如下图,文件中的数据, 传给了 3台 map节点,那么这3台蓝色的 map节点 处理完数据后,  要把数据传给  黄色的3台 reduce 节点, 

关键点 就在这 3台蓝色的map节点是怎么 传给 黄色 3台reduce 节点的,   

其实是 把map节点 所有数据进行 盘点洗牌,找到 (a, 1) 元素发给  reduce1节点,找到 (b, 1) 元素发给  reduce2节点.....

这个就是洗牌,对数据进行重新清洗,找到 特定元素 发给特定 节点。

shuffle 是需要大量的 节点之间的 网络IO开销的,并且shuffle一定会落磁盘。

什么是窄依赖:

有2种情况:

1、一个父RDD 对应一个子RDD

2、两个或多个 父RDD 对应一个子RDD

什么是宽依赖

一个父RDD 对应多个 子RDD

因为如果 一个父RDD 对应多个 子RDD ,那么父RDD 会进行洗牌操作,找到特定的元素 发给特定的 某个子节点。

5.DAG schedule 为什么要划分stage 阶段 (作业)

DAG schedule  根据RDD之间的宽窄依赖关系,划分stage ,其实是为了提高数据处理的效率,为了实现流水线优化。

简单点说 spark只能对 窄依赖进行优化,  宽依赖没法优化,所以要把宽窄依赖分开。

先来看下spark的流水线优化 的基本原理

首先,在并行处理有2个基本的操作,fork 和 join ,  fork 是分发   ,join是汇集

spark的流水线优化 其实就是对 不必要的join的 优化,减少不必要join,因为 join就可能有时间的等待

比如说,要实现把 北京一个学校的学生 送到厦门,根据宽窄依赖不同 可以有2种方案

第一种,窄依赖情况,

如下图,  分别由班长带男生 和 组织委员带女生 ,分别乘坐飞机(并行处理),先飞往上海 集合后,再由班长带领男生 、组织委员带女生 ,从上海飞往厦门。

那么在这个过程中 由于要在上海集合, 所以班长带的男生 到达上海后 ,需要等待1小时的  女生,  

然后,两班人马 从上海出发 到厦门后,又要 集合,所以 女生要等 男生1小时,

所以,全程用了 6小时。

在上边的例子中,班长带男生到上海后,等女生 1小时,其实是可以优化掉的,   班长可以直接从北京到厦门,组织委员也是

这个就是 DAG的流水线优化最基本原理

第二种,宽依赖的情况:

班长在带领 男生到上海后,需要带领 1班的学生去厦门,  而组织委员在带领女生到上海后,需要带领 2班学生去厦门

那么在 上海这个环节 就需要把同学重新分配,组织委员带领的1班女生要到 班长那边去 ,班长带的2班男生要到 组织委员那边去,

就有重新洗牌的操作了,就有shuffle,

而且班长提前到达 上海后,必须等组织委员和女生都到达以后 才能出发, 这也就是 宽依赖不能优化的原因。

宽依赖一定会落磁盘

如下图,A -> B 就是一个宽依赖, 所以A这部分 ,就切分为 一个stage

然后 C -> D -> F都是窄依赖 , F -> G 是宽依赖 ,所以 C D F是一个stage

最后 G汇总又是一个stage

一共3个stage

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spark学习2:spark运行基本架构 的相关文章

  • ubuntu 安装openjdk

    在安装环境的过程中可能需要切换安装版本 安装openjdk sudo apt update sudo apt install openjdk 8 jdk sudo apt install openjdk 11 jdk 切换版本 sudo u
  • linux检查是否有D进程,Linux的CPU-Load虚高之进程的D状态

    写在前面 前几天从同事手里接盘了一个 HHKB 的键盘 虽说是顶级的配置 但是如果不提一句的话估计大家都不会意识到码出这篇博文的工具如此高大上 同时意味着我要持续吃土小半年了 就像之前博文提到的 我工作的重心从业务开发逐渐向基础平台建设转移
  • 模拟cisp-pte 综合题三个key

    1 拿到ip地址 扫端口 扫目录不多说 有1443端口 SQL sever数据库 和27666端口 2 扫出来这个地址 查看一下 访问一下 发现一个是后台 一个存在文件包含的网页 一个大概是上传地址 爆破一下后台发现不成功 试一下利用文件包
  • 虚拟主机的配置

    root localhost nmcli connection modify ens160 ipv4 addresses 192 168 171 137 24 root localhost nmcli connection up ens16

随机推荐

  • 21天Jenkins打卡Day15项目复制

    参考文章 http istester com jenkins 188 html
  • 【visual studio】使用 C++ OpenCV 读取图片失败,数据为空

    这里写自定义目录标题 图片路径问题 图片路径问题 F Documents test image Image BMP 需要改成 F Documents test image Image BMP
  • feign调用第三方接口服务

    前言 做个笔记 下次直接抄 这里需要拿到response的header做验签之类的操作 所以用feign Response来接收响应 正文 第三方接口调用的feign 自测OK import com mea pay common excep
  • 广告案例|10亿数据、查询<10s,论基于OLAP搭建广告系统的正确姿势

    由于流量红利逐渐消退 越来越多的广告企业和从业者开始探索精细化营销的新路径 取代以往的全流量 粗放式的广告轰炸 精细化营销意味着要在数以亿计的人群中优选出那些最具潜力的目标受众 这无疑对提供基础引擎支持的数据仓库能力 提出了极大的技术挑战
  • Google 每天处理约 20000TB 的数据

    Google 热衷于处理全球的信息 每天 他们花费大量时间探索更好的信息整理技术 他们目前使用的技术为 MapReduce 这是一种可以对数据进行并发处理的软件架构 鉴于其简单性与处理大规模数据的能力 MapReduce 是 Google
  • SpringBoot+vue(MyBatis + Shiro + Jwt + Druid + Redis + ElementUI )快速开发框架

    Jeebase 项目介绍 Jeebase是一款前后端分离的开源开发框架 基于springboot vue vue element admin 开发 二期会整合react前端框架Ant Design React 在实际应用中已经使用这套框架开
  • 1188C语言实验——各位数字之和排序

    题目描述 给定n个正整数 根据各位数字之和从小到大进行排序 输入 输入数据有多组 每组数据占一行 每行的第一个数正整数n 表示整数个数 后面接n个正整数 当n为0时 不作任何处理 输入结束 输出 输出每组排序的结果 示例输入 2 1 2 3
  • Using Field in Searching(使用字段搜索)

    Task 1 Use the Fields sidebar to examine search results In the app navigation bar i e the bar towards the top of the bro
  • React 从零开始学习(九)—— 落子有悔

    到目前为止 demo 的操作是不能回退的 点击格子以后 想要记录历史的操作 就需要 使用 slice 函数为每一步创建 squares 数组的副本 同时把这个数组当作不可变对象 这样就可以把所有 squares 数组的历史版本都保存下来了
  • 四大作用域

    四大作用域解读 1 page指当前页面有效 在一个jsp页面里有效 代表当前的jsppageContext 提供了获取 其他8大隐式对象的方法域对象setAttribute String name Object value 2 reques
  • Android面试家常菜:Handler消息机制全家桶一把梭,看完这篇还不懂,请砍我

    前言 Handler可以说小伙伴们用的非常多了 可以说Handler是支撑整个Android系统运行的基础 本质上Android系统都是由事件驱动的 而处理事件的核心就在于Handler 接下来我们就从简单的使用 到源码分析让你彻彻底底明白
  • Python 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    给定排序数组和目标值 如果找到目标 则返回索引 如果没有 请返回索引按顺序插入的索引 您可以假设数组中没有重复项 Example 1 Input 1 3 5 6 5 Output 2 Example 2 Input 1 3 5 6 2 Ou
  • Axure实现弹框周围遮罩效果

    每一次我都惊叹知识的浩瀚和多彩 在IT这个所做即所得的世界里 很容易获得成就感 当然也时时刻刻活在对大神的膜拜之中 就以这次的原型图制作来说 我们遇到了很多的问题 自己实现了很多功能 但是今天晚上大家对自己原型图的演示和分享之中 又让我感叹
  • 2022年全国大学生数学建模竞赛赛题B组解题参考+代码

    题目 获取题目方式 2022年全国大学生数学建模竞赛题目 代码思路获取方式 关注博主竞赛专栏 B 题 无人机遂行编队飞行中的纯方位无源定位 无人机集群在遂行编队飞行时 为避免外界干扰 应尽可能保持电磁静默 少向外发射电磁波信号 为保持编队队
  • VMware 使用U盘装系统

    第一步 首先要有U盘 把这个U盘制作成启动盘教程中使用的是大白菜 大白菜下载地址 第二步 打开你的VMware 新建一个虚拟盘机 第三步 选择稍后安装系统 第四步 选择你要安装的系统 第五步 是你给虚拟机命名和选择安装路径最好不要放在C盘里
  • C++第六章:选择结构的程序设计

    一 选择语句 1 if语句 if语句的作用是计算给定的表达式 根据判断结果选择执行相应的语句 形式1 if 表达式 语句1 例 int a 5 b 1 t if a gt b t a a b b t 形式2 if 表达式 语句1 else
  • Ubuntu-22.04通过RDP协议连接远程桌面

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 RDP是什么 二 配置 1 打开远程桌面功能 2 验证服务 3 防火墙配置 4 测试效果 总结 前言 由于一些特殊需要 我需要通过远程桌面连接到Ubunt
  • 0-1背包问题和完全背包问题

    先总体介绍一下0 1背包和完全背包的区别 主要是01背包和完全背包 背包九讲里面的其他背包问题 都是竞赛级别的 leetcode上面没有 01背包就是 背包存在一个最大容量V 每个物品有两个参数 体积w和价值v 目的是在不超过背包最大容量的
  • 利用 mysql.help_topic 生成序列

    有时我们在生成一些时间轴类似的数据时 要求数据库不管有没有指定天的数据 都要生成该时间节点 可用mysql help topic来解决生此类问题 通过序列和日期函数相结合来满足我们的业务需求 mysql 生成序列 利用 mysql help
  • spark学习2:spark运行基本架构

    各个名词介绍 1 RDD 弹性分布式数据集 2 DAG 有向无环图 反应各RDD之间关系 即把第一个RDD和最后一个RDD 串联起来的关系图 根据DAG 能够找到每个RDD的父RDD 3 executor executor是 驻守在各个工作