Spark运行架构

Spark运行架构

Spark 架构的核心是一个计算引擎,整体来说,它采用了标准的master-slave的结构

Driver—>master Executor->slave

核心组建

Driver & Execute 计算

Spark Driver驱动节点 用于执行Spark任务重的main方法,负责实际代码的执行工作
Driver 在Spark作业执行时主要负责
1.将用户程序转化为作业job
2.在Executor之间调度任务task
3.跟踪Execute的执行情况
4.通过UI展示查看运行情况

Spark Executor 是工作几点Worker 中的一个JVM进程,负责在Spark 作业中运行具体任务,任务之间相互独立,Spark 应用启动时 Execute节点被同时启动

1.负责运行spark应用的任务,并将结果返回给驱动器进行
2.通过自身管理器 Block manager 为用户程序中要求缓存的RDD提供内存式缓存 RDD是之间缓存在Execute进行内的,因此任务可以在运行时充分利用缓存数据加速运算

Master & Worker 资源

Spark集群的独立部署环境中,不需要依赖其他的资源调度框架,自身实现了资源调度的功能 Master Worker

Master类似yarn中的RM 负责资源调度 集群监控等

Worker类似yarn中的NM 也是一个进程 一个Worker运行在集群中的一个服务器上,由Master分配资源对数据进行并行的处理和计算 

ApplicationMaster

为了计算和资源解耦而出现

调度方式

Spark应用程序提交到Yarn环境中执行的时候,一般会有两种部署方式:Client 和Cluster

两种模式的主要区别在于 Driver 程序的运行节点位置

YarnClient模式

Client 模式将用于监控和调度的Driver 模块在客户端 而不是在Yarn中 一般用于测试
1.Driver在任务提交的本地机器上运行
2.Driver 启动后会和 ResourceManager 通讯申请启动 ApplicationMaster
3.ResourceManager 分配 container,在合适的 NodeManager 上启动 ApplicationMaster,负
责向 ResourceManager 申请 Executor 内存
4.ResourceManager 接到 ApplicationMaster 的资源申请后会分配 container,然后
ApplicationMaster 在资源分配指定的 NodeManager 上启动 Executor 进程
5.Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行
main 函数
6.之后执行到 Action 算子时,触发一个 Job,并根据宽依赖开始划分 stage,每个 stage 生
成对应的 TaskSet,之后将 task 分发到各个 Executor 上执行

Yarn Cluster模式

Cluster 模式将用于监控和调度的 Driver 模块启动在 Yarn 集群资源中执行。一般应用于
实际生产环境。
➢ 在 YARN Cluster 模式下,任务提交后会和 ResourceManager 通讯申请启动
ApplicationMaster, ➢ 随后 ResourceManager 分配 container,在合适的 NodeManager 上启动 ApplicationMaster,
此时的 ApplicationMaster 就是 Driver。 ➢ Driver 启动后向 ResourceManager 申请 Executor 内存,ResourceManager 接到
ApplicationMaster 的资源申请后会分配 container,然后在合适的 NodeManager 上启动
Executor 进程
➢ Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行
main 函数,
➢ 之后执行到 Action 算子时,触发一个 Job,并根据宽依赖开始划分 stage,每个 stage 生
成对应的 TaskSet,之后将 task 分发到各个 Executor 上执行。

三大数据结构

➢ RDD : 弹性分布式数据集

➢ 累加器:分布式共享只写变量

➢ 广播变量:分布式共享只读变量

数据结构:数据组织和存储的方式

RDD:

RDD的数据处理方式类似于IO流,也有装饰者设计模式

RDD的数据只有在调用collect的时候 才会真正的执行,之前的封装全部是功能的扩展

RDD他是不保存数据的,IO临时保存数据的

RDD分区:分布式

RDD:弹性的 不可变 可分区 里面的元素可并行计算的集合

弹性:

1.存储的弹性:内存与磁盘的自动切换
2.容错的弹性:数据丢失可以自动恢复
3.计算的容错:计算出错重试机制
4.分片的弹性:可根据需要重新分片

分布式:

分布式:数据存储在大数据集群不同节点上

➢ 数据集:RDD 封装了计算逻辑,并不保存数据

➢ 数据抽象:RDD 是一个抽象类,需要子类具体实现

➢ 不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在

新的 RDD 里面封装计算逻辑

➢ 可分区、并行计算

RDD5大属性

1.分区列表 getPartitions()

分布式计算

RDD数据结构中存在分区列表,用于执行任务时并行计算,是实现分布式计算的重要属性

2.分区的计算函数 compute()

Spark在计算,是使用分区函数对每个分区进行计算的

3.RDD 之间的依赖关系 getDependencies()

4.分区器 partitioner() 可有可无 (分区的规则)

5.首选的位置

判断计算发送到哪个节点,效率最优

移动数据不如移动计算

执行原理

从计算的角度来讲,数据处理过程中需要计算资源 内存 & CPU & 计算模型(逻辑)

Spark框架在执行时 先申请资源然后将应用程序的数据处理模型分解成一个个计算任务,然后将任务发送给已经分配资源的计算节点上,按照指定的计算模型进行数据计算,最后得到计算结果


版权声明:本文为weixin_46292457原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。