大数据 - Spark系列《十三》- spark集群部署模式

   Spark系列文章:

大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客

大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客

大数据 - Spark系列《四》- Spark分布式运行原理-CSDN博客

大数据 - Spark系列《五》- Spark常用算子-CSDN博客

大数据 - Spark系列《六》- RDD详解-CSDN博客

大数据 - Spark系列《七》- 分区器详解-CSDN博客

大数据 - Spark系列《八》- 闭包引用-CSDN博客

大数据 - Spark系列《九》- 广播变量-CSDN博客

大数据 - Spark系列《十》- rdd缓存详解-CSDN博客

大数据 - Spark系列《十一》- Spark累加器详解-CSDN博客

大数据 - Spark系列《十二》- 名词术语理解-CSDN博客

目录

  13.1. 构造并初始化SparkContext  

   13.2 创建RDD构建DAG  

  13.3 触发行动算子  

   13.4 切分Stage,生成Task和TaskSet  

  13.5 提交stage-Stage的创建过程  

🥙finalStage(ResultStage)

🥙父stage(ShuffleMapStage)

  13.6 在Executor中执行Task  

🥙ResultTask

🥙ShuffleMapTask

13.7 job执行全流程关键步骤总结


 13.1. 构造并初始化SparkContext  

用户主类的 main 方法中首先初始化 SparkContext,这会创建 DagScheduler TaskScheduler,并为与 Executor 通信创建后端。

13.2 创建RDD构建DAG  

  • 原始的RDD通过一系列的转换形成有向无环图(DAG),根据RDD之间的依赖关系划分成不同的 Stage。

  • 窄依赖的RDD操作在同一个Stage中进行计算,而宽依赖需要等待父Stage处理完成后才能开始计算。

   

13.3 触发行动算子  

  • 用户代码中的行动算子触发了 Spark 作业的执行。

  • SparkContext 的 runJob() 方法被调用,开始调度作业。

 13.4 切分Stage,生成Task和TaskSet  

  • DAGScheduler根据作业的RDD依赖关系切分Stage,生成不同的Stage对象。

  • 每个Stage对象中最关键的属性是最后一个RDD,将来生成的Task将使用此RDD的迭代器执行整个迭代器链。

 13.5 提交stage-Stage的创建过程  

  1. 首先,DAGScheduler会将上一步(划分stage)得到finalStage,拿去提交task

2. 提交逻辑会检查当前要提交的stage是否还有未提交的父stage,如果有,就得先提交父stage!  

🥙finalStage(ResultStage)
🥙父stage(ShuffleMapStage)

 

13.6 在Executor中执行Task  

Executor收到Task对象并反序列化后,会将Task包装成一个TaskRunner类以便放入线程池执行

🥙ResultTask
🥙ShuffleMapTask

而线程执行时,调用的就是Task的runTask方法,而runTask方法中,拿到这个task的rdd的迭代器,然后将迭代器传入一个ShuffleWriter.write(records)!

而shuffleWriter.write方法中,就是开始“迭代”这个迭代器

13.7 job执行全流程关键步骤总结

  • spark任务是通过行动算子触发执行的 ,在每个行动算子中都有sc.runjob方法 ;

foreach()行动算子
   -> sc.runJob() // 在SparkContext中执行作业
   -> dagScheduler.runJob() // DAG调度器执行作业
​
​
dagScheduler的runJob()
   —> submitJob()// 提交作业
   
dagScheduler的submitJob()
  -> eventProcessLoop.post(JobSubmitted)   // 发送作业提交事件 
  
  
DAGSchedulerEventProcessLoop收到消息
  ->doOnReceive()  
  
 
​
DAGSchedulerEventProcessLoop的doOnReceive()
  -> dagScheduler.handleJobSubmitted 
  
  
DagScheduler的handleJobSubmitted方法
  ->  finalStage = createResultStage(finalRDD, func, partitions, jobId, callSite)  // 根据finalRDD创建finalStage
  ->  submitStage(finalStage)  // 递归提交,永远是先从前面的stage开始提交
  
  
submitStage()
  ->  submitMissingTasks(stage, jobId.get)
  
​
submitMissingTasks方法
  -> 把stage的finalRDD信息序列化后广播给每个executor
  -> 根据要提交的stage的类型,以及需要计算的分区个数,生成相应类型相应个数的Task对象
  -> taskScheduler.submitTasks(new TaskSet(tasks.toArray,stage.id,job.id...))
​
​
TaskSchedulerImpl.submitTasks
  -> 将task对象序列化,发给executor
  -> task发给executor,也是有调度策略的:FIFO
  
  
Executor收到task对象,就反序列化
并将反序列化出来的task对象封装到一个TaskRunner对象中
然后把这个TaskRunner对象放入线程池执行
​
TaskRunner的run方法,就是调task对象的runTask方法
​
​
​
task对象的runTask方法就要看是哪种task了(shuffleMapTask,resultTask)
​
shuffleMapTask的runTask方法中,调ShuffleWriter.write(finalRDD.iterator)
​
​
ShuffleWriter.write(iterator)具体实现,要看是哪一种ShuffleWriter实现类
   while(iterator.hasNext)
      kv = iterator.next
      // 不同实现类的不同之处就在后续将kv放到哪里去缓存,以及缓存满了以后怎么溢出
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/448684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

刘敏:楼氏动铁和麦克风助力听力健康技术发展 | 演讲嘉宾公布

一、助辅听器材Ⅱ专题论坛 助辅听器材Ⅱ专题论坛将于3月28日同期举办! 听力贯穿人的一生,听觉在生命的各个阶段都是至关重要的功能,听力问题一旦出现,会严重影响生活质量。助辅听器材能有效提高生活品质。在这里,我们将…

【动态规划】代码随想录算法训练营第五十一天 | 309.最佳买卖股票时机含冷冻期, 714.买卖股票的最佳时机含手续费,总结(待补充)

309.最佳买卖股票时机含冷冻期 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足…

力扣题解30. 串联所有单词的子串

Python&Java双语解决力扣必刷算法,题号30. 串联所有单词的子串 目录 题目描述 解题思路 完整代码 Python Java 题目描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以…

Milvus的相似度指标

官网:https://milvus.io/docs/metric.md版本: v2.3.x 在 Milvus 中,相似度度量用于衡量向量之间的相似度。选择良好的距离度量有助于显着提高分类和聚类性能。下表展示了这些广泛使用的相似性指标如何与各种输入数据形式和 Milvus 索引相匹配。 一、浮…

数据结构---复杂度(2)

1.斐波那契数列的时间复杂度问题 每一行分别是2^0---2^1---2^2-----2^3-------------------------------------------2^(n-2) 利用错位相减法,可以得到结果是,2^(n-1)-1,其实还是要减去右下角的灰色部分,我们可以拿简单的数字进行举例子&…

力扣题目训练(18)

2024年2月11日力扣题目训练 2024年2月11日力扣题目训练561. 数组拆分566. 重塑矩阵572. 另一棵树的子树264. 丑数 II274. H 指数127. 单词接龙 2024年2月11日力扣题目训练 2024年2月11日第十八天编程训练,今天主要是进行一些题训练,包括简单题3道、中等…

第十五届蓝桥杯-UART接收不定长指令的处理

学习初衷: 不仅仅为了比赛! 目录 一、问题引入 二、UART常用的三种工作模式 1.UART工作在中断模式 2.UART工作在DMA模式下 3.uart工作在接收转空闲的模式下 三、获取指令中需要的数据 四、printf函数的实现 一、问题引入 问题引入:请…

定制红酒:如何根据客户需求调整红酒口感与风格

在云仓酒庄洒派,云仓酒庄洒派深知不同消费者对于红酒的口感与风格有着不同的喜好和需求。因此,云仓酒庄洒派根据消费者的具体要求,灵活调整红酒的口感与风格,以满足他们的期望。 首先,云仓酒庄洒派会与消费者进行深入的…

【axios】你的进度条准确吗

1、axios监听进度 上传和下载操作在前端中是非常常见的,当我们想知道上传或下载的进度时也不难,axios已经实现了监听进度的方法 import axios from axios// 上传请求 axios.post(/api/v1/upload, {data: xxx},{// onUploadProgress回调可以获取进度onU…

SSM整合项目(删除家居 + 分页查询)

1.删除家居 1.需求分析 2.编写Service层 1.FurnService.java 添加方法 //删除家居public void del(Integer id);2.FurnServiceImpl.java 实现方法 Overridepublic void del(Integer id) {furnMapper.deleteByPrimaryKey(id);}3.单元测试 Testpublic void del() {furnService.…

JavaScript基础6之执行上下文、作用域链、函数创建、函数激活、checkScope的执行过程、闭包、this

JavaScript基础 执行上下文执行上下文中的属性变量对象全局上下文的变量对象函数上下文执行过程进入执行上下文代码执行思考题 作用域链函数创建函数激活checkScope的执行过程总结 闭包分析闭包 this 执行上下文 执行上下文中的属性 每一个执行上下文都有三个核心属性 变量对…

haproxy-高性能负载均衡反向代理服务

目录 一、HAProxy(High Availability Proxy)概述 1、HAProxy的概念 2、HAProxy的主要特性 3、HAProxy的优缺点 4、Haproxy负载均衡策略 5、LVS、nginx、HAProxy的区别 二、安装HAProxy 1、yum安装 2、第三方rpm包安装 3、编译安装 3.1 解决 l…

【AI视频教程】只需5步,AI作出鸡你太美视频

1.视频效果 2.准备工作 制作视频效果,需要准备下面3个条件: 准备stable diffusion的环境剪辑一段【鸡你太美】原版视频stable diffusion安装sd-webui-IS-NET-pro插件 2.1部署stable diffusion环境 这里还是建议大家用云平台部署stable diffusion&am…

一个测开人员的大厂面试总结

前言 其实我已经入职有好一段时间了, 这里决定总结一下一些面试经验。 我呢,最终还是决定要离开服务了 5 年多的公司。 而这次跳槽历经 3 个月,前后聊了 10 家公司,进行了将近 40 场面试, 基本都是 41 的流程 (技术面 HR 面)&…

计算机网络-第5章 运输层(2)

5.6 TCP可靠传输实现 以字节为单位的滑动窗口。 发送窗口已满,停止发送。 发送和接收的数据都来自缓存。 超时重传时间RTO选择:自适应算法, 选择确认SACK:只传送缺少的数据。大多数实现还是重传所有未被确认的数据块。 5.7 TCP的…

小程序学习 1

pages/goods/search/home.wxml首页功能设定 1. loading入场 2. 下拉刷新 3. 搜索栏 4. 分类切换 5. 商品列表 6. 规格弹层 7. 加载更多 <view style"text-align: center; color: #b9b9b9" wx:if"{{pageLoading}}"><t-loading theme"circula…

网络安全防御保护 Day7

1.因为FW1和FW2已处于双机热备状态&#xff0c;所以只需要对主设备进行配置即可。进入FW1的配置界面&#xff0c;选择“网络”界面&#xff0c;点击“IPsec”&#xff0c;进行IPsec通道的基本配置&#xff0c;这里选择的是“电信”链路。 2.完成上述配置后&#xff0c;进行待加…

面试官:线程调用2次start会怎样?我支支吾吾没答上来

写在开头 在写完上一篇文章《Java面试必考题之线程的生命周期&#xff0c;结合源码&#xff0c;透彻讲解!》后&#xff0c;本以为这个小知识点就总结完了。 但刚刚吃晚饭时&#xff0c;突然想到了多年前自己面试时的亲身经历&#xff0c;决定再回来补充一个小知识点&#xff…

【DPDK】基于dpdk实现用户态UDP网络协议栈

文章目录 一.背景及导言二.协议栈架构设计1. 数据包接收和发送引擎2. 协议解析3. 数据包处理逻辑 三.网络函数编写1.socket2.bind3.recvfrom4.sendto5.close 四.总结 一.背景及导言 在当今数字化的世界中&#xff0c;网络通信的高性能和低延迟对于许多应用至关重要。而用户态网…

并发通信(网络进程线程)

如果为每个客户端创建一个进程&#xff08;或线程&#xff09;&#xff0c;因为linux系统文件标识符最多1024位&#xff0c;是有限的。 所以使用IO复用技术&#xff0c;提高并发程度。 阻塞与非阻塞 阻塞式复用 非阻塞复用 信号驱动IO 在属主进程&#xff08;线程中声明&…