深入理解 Spark(二)SparkApplication 提交和运行源码分析

news2024/9/24 5:33:25

spark 核心流程

在这里插入图片描述

yarn-client在这里插入图片描述

yarn-cluster

在这里插入图片描述

spark 任务调度

spark stage 级别调度

在这里插入图片描述

spark task 级别调度

失败重试和白名单

对于运行失败的 Task,TaskSetManager 会记录它失败的次数,如果失败次数还没有超过最大重试次数,那么就把它放回待调度的 Task 池子中等待重新执行,当重试次数过允许的最大次数,整个 Application失败。在记录 Task 失败次数过程中,TaskSetManager 还会记录它上一次失败所在的 ExecutorId 和 Host,这样下次再调度这个 Task 时,会使用黑名单机制,避免它被调度到上一次失败的节点上,起到一定的容错作用。

spark 的任务提交源码剖析

spark 中 DAG 引擎的设计

在这里插入图片描述

spark 的 runtime 运行环境

在这里插入图片描述

面向 DAG 调度的 DAGScheduler

1、主要作用:维护 waiting jobs 和 active jobs 两个队列,维护 waiting stages、active stages 和 failed stages,以及与 jobs 的映射关系。
2、工作机制:DAGScheduler 拿到一个 JOB, 会切分成多个 Stage,从 job 的后面往前寻找 shuffle 算子。如果找到一个 shuffle 算子,就切开,已经找到的 RDD 的执行链就自成一个 Stage,放入到一个栈中。将来 DAGScheduler 要把这个栈中的每个 stage 拿出来,提交给 TaskScheduler。
3、核心描述

  • 一个 Application = 多个 job
  • 一个 job = 多个 stage,也可以说一个 application = 多个 stage
  • 一个 Stage = 多个同种 task 并行运行
  • Task 分为 ShuffleMapTask 和 ResultTask
  • Dependency 分为 ShuffleDependency 宽依赖 和 NarrowDependency 窄依赖
  • 面向 stage 的切分,切分依据为宽依赖

面向 Task 调度的 TaskScheduler

TaskScheduler:DAGScheduler 把 Stage 变成 TaskSet,然后交由 TaskScheduler 执行任务分发
1、TaskScheduler 本身是个接口,Spark 里只实现了一个 TaskSchedulerImpl,理论上任务调度可以定制。
2、维护 task 和 executor 对应关系,executor 和物理资源对应关系,在排队的 task 和正在跑的 task。
3、维护内部一个任务队列,根据 FIFO 或 Fair 策略,调度任务。
4、TaskScheduler 有两个重要的成员变量:
(1)DAGScheduler:负责 job 中的 stage 切分,
(2)SchedulerBackend:执行 Task 的分发

SparkContext / SparkSession

无所不包容的一个容器,spark App 在运行过程中的,各种信息都存储在 SparkContext 中。SparkContext / SparkSession 是 Spark Application 运行时上下文对象,包含了很多其他功能组件。
1、SparkContext 是用户通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDD、累加器 Accumulator 和广播变量 Braodcast Variable,但是你想要的功能,你问他就行。
2、SparkContext 也是整个 Spark 应用程序中至关重要的一个对象,可以说是整个应用程序运行调度的核心(不是指资源调度)
3、SparkContext 在实例化的过程中会初始化 DAGScheduler、TaskScheduler 和 SchedulerBackend
4、SparkContext 会调用 DAGScheduler 将整个 Job 划分成几个小的阶段(Stage),TaskScheduler 会调度每个 Stage 的任务 (Task) 应该如何处理。另外,SchedulerBackend 管理整个集群中为这个当前的应用分配的计算资源 (Executor)

SparkConf + SparkEnv

SparkConf 是 Spark 中用来管理配置一个的管理类,类似于 Hadoop 中的 Configuration。
SparkEnv 是 Spark Application 在运行的时候,所需要的各种功能组件的一个整合体,类似于 Hadoop 中的 Context。
在这里插入图片描述

Spark Runtime 组件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spark Application 应用程序编写规范

1、重点:获取程序编写入口 SparkContext:new SparkContext(sparkConf)(新版本: SparkSession.getOrCreate();)
2、通过 SparkContext 来加载数据源得到数据抽象对象:RDD
3、针对数据抽象对象 RDD 调用各种算子执行各种逻辑计算:lazy,延迟到 action 的内部来执行
4、重点:调用 action 算子触发任务的提交执行:sparkContext.runJob()
5、处理结果并且关闭资源

Spark Application 应用程序执行流程详解

Spark Application 提交执行过程中的消息交互,大致如下:在通过 spark-submit 提交一个 App 运行的时候,其实是执行 SparkSubmit 这个类,启动 Client,在它的内部,启动一个 RPC 客户端。
最容易造成误解的两个概念:

  • Worker Server Node 一台硬件服务器
  • Worker JVM Process 一个 Spark 集群的 从节点 JVM 守护进程

简单版

在这里插入图片描述

详细版

在这里插入图片描述

01、理解业务,了解 Spark 编程,编写业务代码实现
02、将应用程序项打成 jar 包
03、通过 spark-submit 脚本来提交,在提交的时候,可以指定资源系统类型
04、执行 SparkSubmit 类的 main ()
05、在标准的 Spark Standalone 集群中:转交给 ClientApp 的类来执行,如果是 Spark on yarn,则客户端类是:YarnClusterApplication
06、会在 ClientApp 内部初始化 CLientEndponit(存在于client中) 的组件:发送 RequestSubmitDriver 给 Master
07、Master 处理 RequestSubmitDriver 消息: 注册 Driver, 启动 Driver,返回 SubmitDriverResponse 消息给 ClientApp 的 CLientEndponit
08、启动 Driver: java DriverWrapper 这个类,转到: DriverDrapper main() 方法
09、通过反射的方式启动和执行我们自己写的业务代码的 main() 方法: JavaWordCount.main()
10、自己编写的业务代码中的第一句代码: 初始化 SparkSessoin(SparkConf, SparkContext)
11、初始化 SparkContext: TaskScheduler SchedulerBackend(DriverEndpoint CLientEndpoint) DAGScheduler
12、应用注册:ClientEndpoint 发送 RegisterApplication 消息给 Master, 返回 RegisteredApplication
13、Master 发送消息 LaunchExecutor 给 Worker, 启动 Executor(真正启动的是:ExecutorBackend)
14、Executor 启动了,则初始化一个线程池,等待 Driver 分发任务过来,由线程池执行,Executor 启动好了之后,会向 Driver 注册,同时也会向 Master 反馈
15、当一个 Spark job 的 Driver 和 Executor 都启动好了之后,那么意味着 Spark Context 的初始化就搞定了
16、接下来就是 Action 算子执行,触发 job 的提交:sparkContext.runJob();
17、SparkContext 中的 DAGScheduler 对应用代码构建的 DAG 进行 stage 切分
18、SparkContext 中的 TaskScheduler 对当前 Stage 进行提交执行:发送 LaunchTask 消息给 Executor,在 Executor 中的一个线程中启动一个 Task

spark-submit 脚本分析

在这里插入图片描述

DAGScheduler 异步模型

在这里插入图片描述

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

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

相关文章

教育观察期刊投稿邮箱、投稿要求

《教育观察》创刊于2012年,是国家新闻出版总署批准的正规教育类学术期刊,本刊致力于在教育实践中以“观察”为方法,以“观察者”为主体,以“新观察”为旨趣,打造从教育实践中洞察教育未来的教育研究与交流的平台。主要…

软件测试|深入理解Python中的re.search()和re.findall()区别

前言 在Python中,正则表达式是一种强大的工具,用于在文本中查找、匹配和处理模式。re 模块提供了许多函数来处理正则表达式,其中 re.search()和 re.findall() 是常用的两个函数,用于在字符串中查找匹配的模式。本文将深入介绍这两…

【WEB API自动化测试】接口文档与在线测试

这一篇我们主要介绍如何做API帮助文档,给API的调用人员介绍各个 API的功能, 输入参数,输出参数, 以及在线测试 API功能(这个也是方便我们自己开发调试) 我们先来看看我们的API最终帮助文档及在线测试最终达到的效果: 概要图 GET API 添加产品API: 删除…

电影开场后也能退票,“电影仅退款”能治烂片病吗?

1月11日,“#电影开场后也能退票了#”词条登上微博热搜。 根据央视六套《中国电影报道》,从今年元旦开始,湖南长沙部分影院开启了新型电影保险模式的试点。 在电影开场后30分钟以内,市民如果对电影内容不满意,可借助小…

超维空间S2无人机使用说明书——61、ROS无人机4G远程控制

4G模块使用说明 引言:为了实现对无人机的远程控制,我们采用了4G通信的方案,该方案需要硬件以及相关软件的支持。4G通信是可选择功能,请确认无人机型号是否选配了4G通信。 一、4G通信方案 我们的4G通信主要通过两种方式实现&…

软件测试|如何实现字典的键值互换,你会了吗?

简介 在Python中,字典是一种非常有用的数据结构,它将数据存储为键值对,并且键必须是唯一的。有时候,我们可能需要将字典的键和值互换,以便查找或操作数据更加方便。本文将详细介绍如何在Python中实现字典键值的互换操…

Flink(十二)【容错机制】

前言 最近已经放假了,但是一直在忙一个很重要的自己的一个项目,用 JavaFX 和一个大数据组件联合开发一个功能,也算不枉我学了一次 JavaFX,收获很大,JavaFX 它作为一个 GUI 开发语言,本质还是 Java&#xff…

Servlet-体系结构

一、思考 读者阅读完上一篇关于Servlet基本概念的文章后,我们知道每次实现一个Servlet,都需要覆盖五个接口,我们对除service接口外的其它四个接口,我们通常不会做什么处理。那么,这种实现方式是否有些繁琐呢&#xff…

python_selenium_安装基础学习

目录 1.为什么使用selenium 2.安装selenium 2.1Chrome浏览器 2.2驱动 2.3下载selenium 2.4测试连接 3.selenium元素定位 3.1根据id来找到对象 3.2根据标签属性的属性值来获取对象 3.3根据xpath语句来获取对象 3.4根据标签的名字获取对象 3.5使用bs4的语法来获取对象…

数字智慧驱动:数据可视化如何助力大企业效率飙升?

在当今信息大爆炸的时代,大型企业面临着前所未有的数据挑战。数据量庞大、多样化的信息汇聚,无疑成为企业高效运营的挑战之一。幸运的是,数据可视化作为一种强大的工具,正成为大型企业提高效率、优化决策的得力助手。 数据可视化首…

开发代码基础

首先安装驱动,在ARDUINO环境下安装,然后安装开发板,详见哔哩哔哩教程 1:接入点模式(也称 AP) 通过以下示例程序,NodeMCU将会建立一个名为taichi-maker的WiFI。您可以使用手机或电脑连接该WiFi…

力扣2182.构造限制重复的字符串

思路:先记录每个字符的出现次数,构建一个新字符串,从尾取字符,每取一个该字符个数-1,若该字符已经取到有repeatLimit个,则递归取次大的字符,并对应字符个数-1,若没有次大字符了&…

[acm算法学习] 后缀数组SA

学习自B站up主 kouylan 定义 后缀是包含最后个字母的子串 把字符串 str 的所有后缀按字典排序,sa[i]表示排名为 i 的后缀的开头下标 如何求解SA 倍增的方法 先把每个位置开始的长度为1的子串排序,在此基础上再把长度为2的子串排序(长度…

玩转Mysql 七 (索引的创建与设计原则)

一、索引的创建与使用 1、索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 (1)从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 (…

模拟日光AR汽车HUD的光学特性太阳光模拟器

AR HUD 的光学特性 几何光学可描述物体、透镜和成像之间的关系。将物体放在透镜及其焦点之间将会形成放大且离实际物体有一定距离的虚像[4]。这便是 HUD 生成虚像的方法。源物体(在这里是散射屏或 TFT 面板)在 HUD 反光镜光学系统的焦距内。这使相应虚像…

(学习日记)2024.01.13:一份关于自行车定位的调研 2

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

【文献解读】“MOBILEViT:轻量级、通用目的、移动友好的视觉变换器”。

今天阅读这篇2022年ICLR会议上发表的论文,主要是为了学习MobileViT模型,用于YOLO模型主干改造。 一、文献概述 作者:Sachin Mehta 和 Mohammad Rastegari。地点:作者所属机构是 Apple。内容简述: 提出了一种名为Mob…

用模方软件进行模型的透明贴图,为什么翻出来透明部分是黑的?

答:透贴需要用PNG格式。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能,支持一键自动提取房屋结构,平均1栋复杂建筑物只需3…

shell中echo和printf在终端输出时更改文本颜色

shell中更改echo或printf的输出颜色可以使用相应的ANSI转义码(ANSI Escape Codes)来实现:各种常用颜色的ANSI如下所示,截图来自于 geeksforgeeks.org 八进制格式应采用以下格式给出:八进制格式必须以名为\033[的参数为前缀,后跟需要指定的颜色…

地图多点自动缩放,居中,思路和手写

效果如下 多个标记点顺次标记连接起来zoom缩放到合适等级,刚好能放下那么多点视野刚好在正中间 zoom 实现思路 获取多点的最大经纬度点和最小经纬度点(这两个点相距离最远)计算2个这两点之间的距离地图是有比例尺的,根据比例尺…