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

news2024/11/16 5:29:59

   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放到哪里去缓存,以及缓存满了以后怎么溢出
​

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【pycharm使用ssh连接服务器】

2、pycharm使用ssh连接服务器 1、具体流程2、一些需要注意的小问题2.1 更改代码地址2.2 本地代码上传到服务器2.3 在服务器的环境中上新安装库,但是pycharm检测不到 1、具体流程 打开pycharm – File – Setting 输入服务器的IP地址,端口号、登录账号名…

qt如何配置ros环境

在Qt5.7的版本可以使用bash -i -c来启动qt,让Qt自己识别系统环境,不知道为什么Qt在之后的版本,这样使用都失效了。因为它会默认把CMAKE_PREFIX_PATH修改掉。 网上还有安装ros插件版本的qt creator,感觉失去了一些灵活性。 自己测试…

连接端口和连接端口转换OrCAD补丁

来介绍此功能之前先复习一下一些OrCAD的基础知识。 说到连通两个器件,有什么办法呢?最直接的就是用线连通。比如下面这两个器件需要连通,我们可以直接用线Place wire连接。 但是如果这两个器件由于某些原因,他们之间相隔很远&…

Milvus的相似度指标

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

大语言模型:Large Language Models Are Human-Level Prompt Engineers概述

研究内容 如何通过prompt,在不进行微调大语言模型的前提下,增加大语言模型的表现 研究动机 prompt非常有用,但是人工设置的非常不自然;因此提出了要自动使用大语言模型自己选择prompt;取得了很好的效果。 作者主要…

java异常概述及自定义处理

前言 学到异常了,本来以为处理异常只是避免bug,结果发现还可以为了编程需要自定义异常。打好基础,daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

一文彻底搞懂MySQL建表规范

文章目录 1. 表设计规范2. 索引规范3. SQL语句规范4. 散表规范 1. 表设计规范 库名、表名、字段名使用小写字母,使用“_”分割,不超过12个字符。使用InnoDB存储引擎。存储精确浮点数使用DECIMAL替代FLOAT和DOUBLE。使用UNSIGNED存储非负数值&#xff0c…

Linux基础学习:常用命令

目录结构及其常用命令 处理目录的常用命令: ls :列出目录及文件名cd:切换目录pwd:显示目前的目录mkdir:创建一个新的目录rmdir:删除一个空的目录cp:复制文件或目录rm:删除文件或目录…

Redis核心数据结构之字典(一)

字典 概述 字典又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种保存键值对(key-value pair)的抽象数据结构,在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

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.…

超越 Siri 和 Alexa:探索LLM(大型语言模型)的世界

揭秘LLM:语言模型新革命,智能交互的未来趋势 近年来,虚拟助手的世界发生了重大转变。 虽然 Siri 和 Alexa 本身就是革命性的,但一种称为大型语言模型 (LLM) 的新型人工智能正在将虚拟助手的概念提升到一个全新的水平。 在这篇博文…

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

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

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…

汽车软件市场迅猛扩张,Perforce Helix Core与Helix IPLM助力汽车软件开发的版本控制及IP生命周期管理

汽车软件世界正处于持续变革和转型之中。从自动驾驶汽车到电动汽车和先进的驾驶辅助系统,汽车软件的集成度和复杂性不断提升。 据美国电气与电子工程师协会的研究,如今大多数汽车都集成了超过1亿行代码,而仅仅十年前,这种水平的汽…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

掌握Mongodb,看完这篇文章就够了

目录 1.概念 2.操作 2.1数据库操作 2.2集合操作 2.3数据操作 3.查询 4.常用技术 5.python与MongoDB 1.概念 MongoDB是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它以灵活的文档存储格式&#xff08;BSON&#xff09;和强大的查询能…

数据集踩的坑及解决方案汇总

数据集踩的坑及解决方案汇总 数据集各种格式构建并训练自己的数据集汇总Yolo系列SSDMask R-CNN报错 NotADirectoryError: [Errno 20] Not a directory: /Users/mia/Desktop/P-Clean/mask-RCNN/PennFudanPed2/labelme_json/.DS_StoreFaster R-CNN数据的格式转换划分数据集设定内…

5天获限定访问学者Offer|新加坡南洋理工大学申请公派成功

L老师拟申报某公派访问学者项目&#xff0c;要求半个月内获得新加坡国立大学或者南洋理工大学的邀请函。我们利用广泛的资源和丰富的申请经验&#xff0c;高效运作&#xff0c;仅仅5天就获得了新加坡南洋理工大学的邀请函&#xff0c;提前完成申请人的委托。 L老师背景&#xf…

OpenStack安装步骤

一、准备OpenStack安装环境 1、创建实验用的虚拟机实例。 内存建议16GB&#xff08;8GB也能运行&#xff09;CPU&#xff08;处理器&#xff09;双核且支持虚拟化硬盘容量不低于200GB&#xff08;&#xff01;&#xff09;网络用net桥接模式 运行虚拟机 2、禁用防火墙与SELin…