Spark 运行架构

打印 上一主题 下一主题

主题 577|帖子 577|积分 1731

运行架构


Spark 框架的焦点是一个盘算引擎,团体来说,它采用了尺度的 master-slave 布局。上图中的 Driver 表现 master ,负责管理整个集群中的作业任务调度;Executor 则是 slave,负责实际执行任务;
焦点组件

Driver

Spark 驱动器节点,用于执行 Spark任务中的 main 方法,负责实际代码的执行工作;Driver 在 Spark 作业执行时主要负责:


  • 将用户步伐转化为作业(job)
  • 在 Executor 之间调度任务(task)
  • 跟踪 Executor 的执行环境
  • 通过 UI 展示查询运行环境
Work

集群从节点,负责启动 Executor 或 Driver ;
Executor

Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务相互之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或瓦解,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行;
Executor 的两个焦点功能


  • 负责运行构成 Spark 应用的任务,并将结果返回给 Driver 进程
  • 它们通过自身的块管理器(Block Manager)为用户步伐中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充实使用缓存数据加快运算;
ClusterManager

standalone 模式种即为 Master 节点,控制整个集群;yarn 模式种为 ResourceManager;
焦点概念

Executor 与 Core

Spark Executor 是集群中运行在 Worker 中的一个 JVM 进程,是整个集群中专门用于盘算的节点。在提交应用时可以提供参数指定盘算节点的个数,以及对应应的资源。这个资源一样平常是指 Executor 的内存大小和使用的虚拟 CPU 核(Core)数量;
应用步伐相关启动参数如下:
名称说明- -num-executors设置 Executor 的数量- -executor-memory设置 Executor 的内存大小- -executor-cores设置 Executor 的虚拟 CPU Core 数量 并行度(Parallelism)

在分布式盘算框架中一样平常都是多个任务同时执行,由于任务分布在差别的盘算节点进行盘算过,所以能够真正地实现多任务并行执行,我们将整个集群并行执行任务的数量称之为并行度;
RDD

弹性分布式数据集,是 Spark 的焦点布局,可以通过一系列算子进行操纵;
特性


  • 弹性:
    存储弹性:内存与磁盘自动切换;
    容错弹性:数据丢失可以自动恢复;
    盘算弹性:盘算出错有重试机制;
    分片弹性:可以根据需要重新分片;
  • 分布式:数据存储在大数据集群差别节点上;
  • 数据集:RDD 封装了盘算逻辑,并不生存数据,所以对 RDD 的操纵并不会改变数据本身,改变的只是 RDD 提供的数据副本;
  • 数据抽象:RDD 是一个抽象类,需要子类具体实现;
  • 不可变:RDD 可以雷同看作 String ,是不可改变的,只能产生新的 RDD;
  • 可分区、并行盘算;
有向无环图(DAG)


有向无环图并不是真正意义的图形,而是由 Spark 步伐直接映射成的数据流的高级抽象模型,描述了 RDD 的依靠关系;
当 RDD 碰到 Action 算子时,会将之前的所有算子形成一个 DAG ,也就是 RDD Graph,再在 Spark 中转化为 Job ,提交到集群执行。一个 APP 中可以包含多个 Job;
Job

一个 RDD Graph 触发的作业,往往由 Spark Action 算子触发,在 SparkContext 中通过 runJob() 方法向 Spark 提交 Job;
Stage

每个 Job 会根据 RDD 的宽依靠关系被切分成多个 Stage,每个 Stage 中包含一组雷同的 Task,这一组 Task 也叫 TaskSet;
Task

一个分区对应一个 Task,Task 执行 RDD 中对应 Stage 中包含的算子。Task 被封装好后放入 Executor 的线程池中执行;
一个 Job 包含多个 Stage,一个 Stage 包含多个 Task;
步伐提交运行流程

Yarn client 模式


1、在 Yarn client 模式下,通过 spark-submit 提交步伐后,会在 client 服务器运行 main() 函数,启动 Dirver 进程;
2、Driver 开始构建并初始化 SparkContext ;
3、SparkContext 向 ClusterManager(ResourceManager)注册,并申请运行 Executor 的资源(内核和内存);
4、ClusterManager 根据 SparkContext 提出的申请和 Worker(NodeManager) 的心跳报告,来决定在哪个 Worker 上启动 Executor;
5、Worker 节点收到请求后会启动 Executor;
6、Executor 向 SparkContext 注册,这样 Driver 就知道哪些 Executor 运行该应用;
7、SparkContext 构建 DAG 图,DAG Scheduler 将 DAG 图分解成多个 Stage ,并把每个 Stage 的 TaskSet 发送给 Task Scheduler ;
8、Executor 向 SparkContext 申请 Task ,Task Secheduler 将 Task发送给 Executor,同时 SparkContext 将步伐代码发送给 Executor;
9、Task 在 Executor 上运行,把运行结果反馈给 Task Scheduler,然后再反馈给 DAG Scheduler,运行完毕后写入数据;
10、SparkContext 向 ClusterManager 注销并释放所有资源;
Yarn cluster 模式

1、在 Yarn cluster 模式下,通过 spark-submit 提交任务后,会启动一个临时进程;
2、临时进程向 ClusterManager(ResourceManager) 通讯申请启动 ApplicationMaster(Driver);
3、 ClusterManager分配 container,并关照 NodeManager 启动 ApplicationMaster,此时的 ApplicationMaster 就是 Driver;
4、NodeManager 启动 Driver;
5、Driver 启动后开始运行用户 main() 函数;
6、Driver开始构建 SparkContext;
7、SparkContext 向 ClusterManager注册 Application 并申请运行 Executor 的资源;
8、ClusterManager收到 Driver 的资源申请后会分配符合的 Worker 节点;
9、Worker 节点启动 Executor 进程;
10、Executor 进程启动后会向 SparkContext 反向注册;
11、SparkContext 构建 DAG 图,DAG Scheduler 将 DAG 图分解成多个 Stage ,并把每个 Stage 的 TaskSet 发送给 Task Scheduler ;
12、Executor 向 SparkContext 申请 Task ,Task Secheduler 将 Task发送给 Executor,同时 SparkContext 将步伐代码发送给 Executor;
13、Task 在 Executor 上运行,把运行结果反馈给 Task Scheduler,然后再反馈给 DAG Scheduler,运行完毕后写入数据;
114、SparkContext 向 ClusterManager 注销并释放所有资源;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表