Spark运行模式介绍

news2024/11/29 12:55:02

文章目录

  • 1. Local运行模式
    • 1.1 基本运行情况介绍
    • 1.2 角色划分
    • 1.3 Spark 任务提交与解释器对比
  • 2. StandAlone运行模式
    • 2.1 StandAlone介绍
    • 2.2 StandAlone架构
    • 2.3 Spark应用架构
    • 2.4 StandAlone HA 运行原理
  • 3. Spark on YARN
    • 3.1 Spark on Yarn 本质
    • 3.2 部署模式
    • 3.3 两种部署模式运行流程

1. Local运行模式

1.1 基本运行情况介绍

本质:启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task
在这里插入图片描述

Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*]

其中N代表可以使用N个线程,每个线程拥有一个cpu core。如果不指定N,
则默认是1个线程(该线程有1个core)。 通常Cpu有几个Core,就指定几个
线程,最大化利用计算能力。

如果是local[*],则代表 Run Spark locally with as many worker threads as
logical cores on your machine.按照Cpu最多的Cores设置线程数

1.2 角色划分

资源管理:

  • Master:Local进程本身
  • Worker:Local进程本身

任务执行:

  • Driver:Local进程本身
  • Executor:不存在,没有独立的Executor角色, 由Local进程(也就是Driver)内的线程提供计算能力

Driver也算一种特殊的Executor, 只不过多数时候, 我们将Executor当做纯Worker对待, 这样和Driver好区分(一类是管理 一类是工人)

注意: Local模式只能运行一个Spark程序, 如果执行多个Spark程序, 那就是由多个相互独立的Local进程在执行

1.3 Spark 任务提交与解释器对比

方式bin/spark-submitbin/pysparkbin/spark-shell
功能提交java/scala/python代码到spark环境中运行提供一个python解释器环境用来以python代码执行spark程序提供一个scala解释器环境用来以scala代码执行spark程序
特点提交代码解释器环境,写一行执行一行解释器环境,写一行执行一行
使用场景正式场合,正式提交spark程序运行测试\学习测试\学习

2. StandAlone运行模式

2.1 StandAlone介绍

Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
在这里插入图片描述
StandAlone 是完整的Spark运行环境,Master角色以Master进程存在, Worker角色以Worker进程存在Driver和Executor运行于Worker进程内, 由Worker提供资源供给它们运行

2.2 StandAlone架构

在这里插入图片描述
StandAlone集群在进程上主要有3类进程:

  • 主节点Master进程: Master角色, 管理整个集群资源,并托管运行各个任务的Driver
  • 从节点Workers:Worker角色, 管理每个机器的资源,分配对应的资源来运行Executor(Task);每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数
  • 历史服务器HistoryServer(可选):Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息

**注意:**集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的
因为程序运行在集群上,具体在哪个节点上我们运行并不知道,其他节点可能并没有那个数据文件

2.3 Spark应用架构

Spark Application运行到集群上时,由两部分组成:Driver Program和Executors

在这里插入图片描述
Driver Program

  • 相当于AppMaster,整个应用管理者,负责应用中所有Job的调度执行
  • 运行JVM Process,运行程序的MAIN函数,必须创建SparkContext上下文对象
  • 一个SparkApplication仅有一个;

Executors

  • 相当于一个线程池,运行JVM Process,其中有很多线程,每个线程运行一个Task任务,一个Task任务运行需要1 Core CPU,所有可以认为Executor中线程数就等于CPU Core核数;
  • 一个Spark Application可以有多个,可以设置个数和资源信息

应用执行流程:

  1. 用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager。 Cluster Manager 会根据用户提交时设置的 CPU 和内存等信息为本次提交分配计算资源,启动 Executor。
  2. Driver会将用户程序划分为不同的执行阶段Stage,每个执行阶段Stage由一组完全相同Task组成,这些Task分别作用于待处理数据的不同分区。在阶段划分完成和Task创建后, Driver会向Executor发送 Task
  3. Executor在接收到Task后,会下载Task的运行时依赖,在准备好Task的执行环境后,会开始执行Task,并且将Task的运行状态汇报给Driver
  4. Driver会根据收到的Task的运行状态来处理不同的状态更新。 Task分为两种:一种是Shuffle Map Task,它实现数据的重新洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另外一种是Result Task,它负责生成结果数据;
  5. Driver 会不断地调用Task,将Task发送到Executor执行,在所有的Task 都正确执行或者超过执行次数的限制仍然没有执行成
    功时停止;

Spark运行监控页面区别:

4040端口: 是一个运行的Application在运行的过程中临时绑定的端口,用以查看当前任务的状态.4040被占用会顺延到4041.4042等,4040是一个临时端口,当前程序运行完成后, 4040就会被注销

8080端口: 默认是StandAlone下, Master角色(进程)的WEB端口,用以查看当前Master(集群)的状态

18080端口: 默认是历史服务器的端口, 由于每个程序运行完成后,4040端口就被注销了. 在以后想回看某个程序的运行状态就可以通过历史服务器查看,历史服务器长期稳定运行,可供随时查看被记录的程序的运行过程.

Spark程序运行层次结构:

在这里插入图片描述
在一个Spark Application中,包含多个Job,每个Job有多个Stage组成,每个Job执行按照DAG图进行的。其中每个Stage中包含多个Task任务,每个Task以线程Thread方式执行,需要1Core CPU。

Spark Application程序运行时的三个概念:Job、Stage、Task

  • Job:由多个 Task 的并行计算部分,一般 Spark 中的action 操作(如 save、collect,后面进一步说明),会生成一个 Job。
  • Stage:Job 的组成单位,一个 Job 会切分成多个 Stage,Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多个 Task 的集合,类似 map 和 reduce stage。
  • Task:被分配到各个 Executor 的单位工作内容,它是Spark 中的最小执行单位,一般来说有多少个 Paritition(物理层面的概念,即分支可以理解为将数据划分成不同
    部分并行处理),就会有多少个 Task,每个 Task 只会处理单一分支上的数据。

2.4 StandAlone HA 运行原理

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障(SPOF)的问题。

Spark提供了两种解决单点故障问题的方案:

  1. 基于文件系统的单点恢复(Single-Node Recovery with Local File System)–只能用于开发或测试环境

  2. 基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)–可以用于生产环境
    在这里插入图片描述
    ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是Active的,其他的都是Standby。当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何的影响。

分布式进程是分布在多个服务器上的, 状态之间的同步需要协调,比如谁是master,谁
是worker,谁成了master后要通知worker等, 这些需要中心化协调器Zookeeper来进行状态统一协调

3. Spark on YARN

YARN是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理。作为典型的计算框架,Spark本身是可以直接运行在YARN中, 并接受YARN的调度的。在企业中,多数场景下,会将Spark运行到YARN集群中。

所以, 对于Spark On YARN, 无需部署Spark集群, 只要找一台服务器, 充当Spark的客户端, 即可提交任务到YARN集群中运行。

3.1 Spark on Yarn 本质

在这里插入图片描述
和StandAlone运行模式对比,在Spark on Yarn架构下,Master角色由YARN的ResourceManager担任;Worker角色由YARN的NodeManager担任;Driver角色运行在YARN容器内 或 提交任务的客户端进程中;真正干活的Executor运行在YARN提供的容器内。

3.2 部署模式

Spark On YARN是有两种运行模式的,一种是Cluster模式,一种是Client模式。
这两种模式的区别就是Driver运行的位置。

  • Cluster模式:Driver运行在YARN容器内部, 和ApplicationMaster在同一个容器内
  • Client模式:Driver运行在客户端进程中, 比如Driver运行在spark-submit程序的进程中

Cluster模式:Driver运行在容器内部

在这里插入图片描述
Client模式:Driver运行在客户端程序进程中

在这里插入图片描述
两种部署模式区别:
在这里插入图片描述
Client模式和Cluster模式最最本质的区别是:Driver程序运行在哪里

Client模式:学习测试时使用,生产不推荐

  1. Driver运行在Client上,和集群的通信成本高
  2. Driver输出结果会在客户端显示

Cluster模式:生产环境中使用该模式

  1. Driver程序在YARN集群中,和集群的通信成本低
  2. Driver输出结果不能在客户端显示
  3. 该模式下Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicattionMaster(Driver)

3.3 两种部署模式运行流程

在YARN Client模式下,Driver在任务提交的本地机器上运行:
在这里插入图片描述

  1. Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster
  2. 随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存
  3. ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程
  4. Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数
  5. 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行

在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体

在这里插入图片描述

  1. 任务提交后会和ResourceManager通讯申请启动ApplicationMaster
  2. 随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver;
  3. Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动Executor进程
  4. Executor进程启动后会向Driver反向注册
  5. Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行

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

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

相关文章

stata变量引用

stata变量引用–潘登同学的stata笔记 文章目录stata变量引用--潘登同学的stata笔记变量生成gen命令通配符:*, ?, -因子变量时间序列变量命名、前缀与标签变量命名、添加前缀通配符与批量重命名变量标签数字-文字对应表CSMAR数据处理查看、查找变量单值、暂元单值暂…

TCP网络连接的书写

TCP网络连接的书写 文章目录TCP网络连接的书写服务器端书写进程sock创建创建bind进行端口绑定(进行bind的初始化)监听socket获取链接用户端创建sock套接字connect进行连接服务器端书写 为TCP是面向连接,所有需要进行对于端口进行监控,另外的UDP的服务器就不需要进行…

洛克菲勒:世界上只有两种人头脑聪明...

洛克菲勒:被人称为“石油大王”、美国第一位十亿富豪与全球首富、创办芝加哥大学。洛克菲勒写给儿子的信共有38封,这些信真实记录了洛克菲勒创造财富神话的种种业绩。从这些信中我们不仅可以看到洛克菲勒优良的品德、卓越的经商才能,还可窥见…

Spring面向切面编程AOP使用介绍

文章目录AOPAOP核心概念AOP快速入门AOP工作流程AOP切入点表达式AOP通知类型AOP通知获取数据AOP总结AOP AOP核心概念 AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构 OOP(Object Oriented Programming)面向对象…

Web自动化测试的详细流程和步骤,一篇足矣

Web自动化测试是软件测试中非常重要的一种测试方法,它通过编写脚本来模拟人工操作网页,从而实现对Web应用程序进行自动化测试的过程。为了保证测试质量和效率,我们需要遵循一定的流程和步骤来完成Web自动化测试。 一、测试环境准备 在进行W…

webp怎么转换成png,4个方法教你快速处理

webp怎么转换成png?目前在一些比较大的图片素材网站下载的图片都是webp格式的。我们都知道webp格式图片,它在正常的图片浏览器中是无法打开的。 所以说我们要把webp图片转变成png格式,正常来说我们常用的图片处理软件也能进行格式转换&#x…

都说互联网不行了,真的是这样吗?

最近在马士兵教育的课堂上经常会听到学员说这样的话: 现在公司都不招人,程序员根本找不到工作 早知道IT行业这么难,当初就不学编程了 简历石沉大海、面试机会也没有,互联网是不是不行了 互联网行情到底如何? 作为…

从此告别写SQL!DataLeap帮你零门槛完成“数据探查”

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在日常数据处理工作中,产品、运营、研发或数据分析师经常会面临数据量大且混乱、质量参差不齐的问题,需要花费大量时间和精力校验表数据是否…

车企外卷:一个关于智能手机的“围城故事”

从2016年达到顶峰开始,全球智能手机出货量逐年下行,手机市场进入红海竞争逐渐成为了各界的共识。此后全球疫情与经济疲软的影响也进一步在手机市场施压,很多媒体认为手机产业距离“至暗时刻”已经不远。而在去年,新增变数&#xf…

Velocity tools进阶(下篇)

最近自己所做的项目使用到这个Velocity模板引擎,分享一下在互联网找的学习资料,仅供学习使用,不参与任何商业活动。 一. VelocityTools介绍 1.1 VelocityTools简介 Velocity Tools 是 Velocity模板引擎的一个子项目,用于将 Velo…

Excel玩转自然语言查询

ChatGPT火出圈,人类被人工智能替代又成为热门话题。有人欢喜,有人忧,也有人不以为意,觉得离自己工作远着呢,比如现在是用Excel做报表,有本事你动动嘴就直接把Excel里面的数据查询出来啊。 你可别说&#xf…

metersphere逻辑整理

整体架构 Frontend: MeterSphere 的前端工程, 基于 Vue.js 进行开发。 Backend: MeterSphere 的后端工程, 基于 Spring Boot 进行开发, 为 MeterSphere 的功能主体。 Chrome Plugin: 浏览器插件, 录制 Web 访问请求生成 JMeter 脚本并导入到 MeterSphere 中用于接口测试及性能…

阿里云产品试用更新,产品组合试用装更划算,快来免费上云吧

最近阿里云产品又上新了,尤其是推出了最新的产品组合试用装,个人觉得阿里云关于云产品的更新迭代是非常重视的,而且每次推出的产品不仅会惊艳到用户,而且产品功能也是随着一次迭代而更加完善、强大。前段时间也写了一篇关于为什么…

Nginx服务配置及相关模块

目录一、Nginx简介1、Nginx简介2、I/O模型相关概念3、Nginx事件驱动模型4、Nginx和Apache的区别二、编译安装Nginx服务1.关闭防火墙,将安装的Nginx软件包安装到opt目录下2、编译安装Nginx3、创建用户、组,以便于更好的管理4、创建软连接并启动5、停止Ngi…

FinClip 开发者工具重构升级!性能飞跃,体验有礼

一直以来不少开发者朋友在社区反馈,在使用 FIDE 工具的过程中,时常会遇到诸如加载不及时、代码预览/渲染性能不如意的情况,十分影响开发体验。 作为技术团队,我们深知一件趁手的开发工具对开发者的重要性,因此&#x…

企业AD域(域控服务器)的安装和配置详细教程

一、环境以及工具准备 软件:VMWare Workstation 2016 ( 下载链接:https://pan.baidu.com/s/1iX1VRilerYPGbGvX4pvaKw 提取码:75R6 ) 镜像:Windows Server 2016 ( 下载地址&#xff…

[CVPR 2020] Regularizing Class-Wise Predictions via Self-Knowledge Distillation

ContentsIntroductionClass-wise self-knowledge distillation (CS-KD)Class-wise regularizationEffects of class-wise regularizationExperimentsClassification accuracyReferencesIntroduction 为了缓解模型过拟合,作者提出 Class-wise self-knowledge distil…

SpringDataRedis客户端详解

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis 提供了对不同Redis客户端的整合(Lettuce和Jedis&…

乡村振兴吹响品牌号角——首届中国乡村振兴品牌大会成功举办

“品牌是力量,是变量,也是流量。”这是浙江省衢州市人大常委会副主任、常山县委书记潘晓辉在首届中国乡村振兴品牌大会上分享的乡村振兴实践体会,引发与会代表的广泛共鸣。 首届中国乡村振兴品牌大会主会场 4月10日至11日,以“加…

计组2.2——数据在计算机中的存储

计组2.2定点数和浮点数定点数无符号数有符号数的定点表示——定点整数和定点小数移位运算1.算术移位1.原码算数移位2.反码算数移位3.补码算术移位4.计算机硬件的乘法是基于算数移位和加法完成的2.逻辑移位3.循环移位加减运算溢出判断硬件判断溢出法一:单一符号位法二…