Spark的通用运行流程与Spark YARN Cluster 模式的运行流程

Spark的通用运行流程

在这里插入图片描述

  1. 集群启动后Worker节点会向Master节点心跳汇报资源
  2. Client向Driver提交APP,根据不同的运行模式在不同的地方创建Driver。
  3. Driver以粗粒度的方式向Master注册应用并申请资源(在Application执行之前,将所有的资源申请完毕,当资源申请成功后,才会进行任务的调度,当所有的Task执行完成后,才会释放这部分资源。)(资源有Executer的CPU Core和Mem)
  4. Master根据SparkContext的资源申请情况以及Worker心跳周期内报告的信息决定在哪个Worker上分配资源,也就是Executer。
  5. Worker节点创建Executer进程,Executer向Driver反向注册。
  6. 资源满足后(Executer注册完毕)SparkContext解析代码,创建RDD,构建DAG,并提交给DAGScheduler分解成Stage(当碰到行动算子时,会催生job,每一个job有一个或多个Stage),然后Stage提交给TaskScheduler,TaskScheduler负责将Task分配给相应的Worker,最后提交Executer执行。
  7. 每个Executer会有一个线程池,Executer通过启动多个线程(Task)来对RDD的Partition进行并行计算,并向SparkContext报告,直到Task完成。
  8. 所有Task完成后,SparkContext向Master注销,释放资源。

Spark YARN Cluster 模式的运行流程

在这里插入图片描述

  • 第一个阶段是把Spark的Driver作为一个ApplicationMaster在YARN集群中启动
  • 第二个阶段是由ApplicationMaster创建应用程序,然后为他向ResourceManager申请资源,并启动Executer来运行Task,同时监控他的整个过程,直到运行完成。
  1. 在YARN Cluster模式下,Driver运行在ApplicationMaster中。程序启动后会和ResourceManager通讯申请启动ApplicationMaster;
  2. ResourceManager收到请求后,通过ResourceScheduler选择一台NodeManager分配一个Container,在Container中开启ApplicationMaster进程;同时在ApplicationMaster中初始化Driver;
  3. ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后他将采用轮询的方式通过RPC协议为各个任务申请资源,并监控他们运行状态直到运行结束;
  4. 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,在NodeManager的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Driver中的SparkContext反向注册并申请Task。
  5. Applicat给ionMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,方便ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
  6. 应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己。该模式下只能通过YARN查看日志。

YARN的Client提交和Cluster提交的区别

  1. Client模式:
    • 在Client模式下,驱动程序(Spark应用的主程序)运行在提交作业的客户端机器上,而不是集群中。
    • 驱动程序与集群中的资源不直接交互,而是依赖于客户机的机器资源,包括CPU,内存和网络带宽等。
    • 客户端负责与ResourceManager通信以请求容器来运行ApplicationMaster和Executor,并且客户端还会负责监控Spark应用发运行状态。
    • 由于驱动程序运行在客户端机器上,因此跟容易地监控和调试作业,开发人员可以直接查看驱动程序的日志和输出。
  2. Cluster模式:
    1. 在Cluster模式下,驱动程序运行在集群中,由ResourceManager分配资源,作业提交后,ResourceManager会启动一个ApplicationManager来管理作业的执行,并分配资源给各个Executor
    2. 客户机仅用于提交作业,一旦作业提交成功后,客户机的角色就结束了。整个作业运行过程由集群负责,包括资源分配和任务的调度。
    3. 由于作业的执行不依赖于客户端机器的资源,而是利用整个集群的资源,因此Cluster模式适合用于生产环境中的大规模数据处理。

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

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

相关文章

创作4周年

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言机…

C语言指针相关练习题

​ C语言指针相关练习题 文章目录 C语言指针相关练习题题目一题目二题目三题目四题目五题目六题目七 题目一 #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }…

使用Python画一棵树

&#x1f38a;专栏【不单调的代码】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f339;Turtle模块&#x1f384;效果&#x1f33a;代码&#x1f6f8;代码…

城市生命线丨桥梁健康结构监测系统作用如何

截至2022年底&#xff0c;我国拥有公路桥梁103.3万座&#xff0c;总长约8576万延米&#xff0c;其中特大桥8816座&#xff0c;总长约1621万延米。 为了确保这些桥梁的安全&#xff0c;需要进行定期的检测和维护&#xff0c;及时发现和解决桥梁存在的问题。 同时&#xff0c;政…

杭电oj 2064 汉诺塔III

#include <stdio.h>void main() {int n, i;long long sum[35] { 2,8,26 };for (i 3; i < 35; i)sum[i] 3 * sum[i - 1] 2;while (~scanf_s("%d", &n))printf("%lld\n", sum[n - 1]); }

9.4 Windows驱动开发:内核PE结构VA与FOA转换

本章将继续探索内核中解析PE文件的相关内容&#xff0c;PE文件中FOA与VA,RVA之间的转换也是很重要的&#xff0c;所谓的FOA是文件中的地址&#xff0c;VA则是内存装入后的虚拟地址&#xff0c;RVA是内存基址与当前地址的相对偏移&#xff0c;本章还是需要用到《内核解析PE结构导…

带记忆的超级GPT智能体,能做饭、煮咖啡、整理家务!

随着AI技术的快速迭代&#xff0c;Alexa、Siri、小度、天猫精灵等语音助手得到了广泛应用。但在自然语言理解和完成复杂任务方面仍然有限。 相比文本的标准格式&#xff0c;语音充满复杂性和多样性&#xff08;例如&#xff0c;地方话&#xff09;,传统方法很难适应不同用户的…

NX二次开发UF_CAM_PREPRO_mark_model_as_cam 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREPRO_mark_model_as_cam Defined in: uf_cam_prepro.h int UF_CAM_PREPRO_mark_model_as_cam(tag_t model ) overview 概述 This function will mark the facet model as…

c++学习之哈希

目录 1.关于unordered系列关联式容器 2.关于unordered_map 3.哈希&#xff08;散列&#xff09;表的实现 一&#xff0c;直接定址法 二&#xff0c;除留余数法 方法一&#xff1a;闭散列&#xff1a;开放定址法 方法二&#xff1a;闭散列&#xff1a;哈希桶/拉链法 4.哈希…

设计模式——RBAC 模型详解

1.什么是 RBAC 呢&#xff1f; RBAC 即基于角色的权限访问控制&#xff08;Role-Based Access Control&#xff09;。这是一种通过角色关联权限&#xff0c;角色同时又关联用户的授权方式。 简单地说&#xff1a;一个用户可以拥有若干角色&#xff0c;每一个角色又可以被分配…

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

内存可见性与指令重排序

文章目录 内存可见性内存可见性问题代码演示JMM&#xff08;Java Memory Model&#xff09; 指令重排序指令重排序问题代码演示指令重排序分析 volatile关键字volatile 保证内存可见性 & 禁止指令重排序volatile 不保证原子性 在上一节介绍线程安全问题的过程中&#xff0c…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 2

1、兰兰有一些数字卡片&#xff0c;从 1 到 100 的数字都有&#xff0c;她拿出几张数字卡片按照一定顺序摆放。想一想&#xff0c;第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案&#xff1a;C 2、按照下图的规律&#xff0c;阴影部分应该填 A、 B、 C、 D、 答案&am…

汇编-PROC定义子过程(函数)

过程定义 过程用PROC和ENDP伪指令来声明&#xff0c; 并且必须为其分配一个名字(有效的标识符) 。目前为止&#xff0c; 我们所有编写的程序都包含了一个main过程&#xff0c; 例如&#xff1a; 当要创建的过程不是程序的启动过程时&#xff0c; 就用RET指令来结束它。RET强制…

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 &#x1f615; ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

FFmpeg 6.1 开放源码多媒体框架近日发布了重大更新

导读FFmpeg 6.1 开放源码多媒体框架近日发布了重大更新&#xff0c;带来了新功能、新解码器、新过滤器和许多其他变化。 在 FFmpeg 6.0 “Von Neumann “版本发布八个多月后&#xff0c;FFmpeg 6.1 被命名为 “Heaviside”&#xff0c;引入了多线程 Vulkan 硬件加速解码&#x…

【React-Router】路由快速上手

1. 创建路由开发环境 # 使用CRA创建项目 npm create-react-app react-router-pro# 安装最新的ReactRouter包 npm i react-router-dom2. 快速开始 // index.jsimport React from react; import ReactDOM from react-dom/client; import ./index.css; import App from ./App; i…

在终端输入任意的英文字符串,求最后一个单词的长度

实例要求&#xff1a;1、在终端输入任意的英文字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开&#xff1b;2、返回字符串中 最后一个 单词的长度&#xff1b;3、单词 是指仅由字母组成、不包含任何空格字符的最大子字符串&#xff1b;示例代码&…

2023亚太杯数学建模竞赛(亚太赛)选题建议+初步分析

如下为C君的2023亚太杯数学建模竞赛&#xff08;亚太赛&#xff09;选题建议初步分析&#xff1a; 提示&#xff1a;DS C君认为的难度&#xff1a;C<A<B&#xff0c;开放度&#xff1a;A<B<C。 以下为ABC题选题建议及初步分析&#xff1a; A题&#xff1a;Image…

Day38力扣打卡

打卡记录 网格中的最小路径代价&#xff08;动态规划&#xff09; 链接 class Solution:def minPathCost(self, grid: List[List[int]], moveCost: List[List[int]]) -> int:m, n len(grid), len(grid[0])f [[0x3f3f3f3f3f] * n for _ in range(m)]f[0] grid[0]for i i…