Spark 的运行流程

本文详细介绍了Spark的基本运行流程,包括DAG的构建、DAG切割、任务调度、Executor执行任务的过程,以及SparkContext初始化、DAGScheduler、TaskScheduler、SchedulerBackend和Executor的角色和功能。此外,还探讨了Spark运行架构的特点,如Application隔离、数据本地性和推测执行优化机制。

目录

1.1、Spark的基本运行流程

1.2、运行流程图解

1.3、SparkContext初始化

1.4、Spark运行架构特点

1.5、DAScheduler

1.6、TaskScheduler

1.7、SchedulerBackend

1.8、Executor


1.1、Spark的基本运行流程

1、构建 DAG

使用算子操作 RDD 进行各种 transformation 操作,最后通过 action 操作触发 Spark 作业运行。 提交之后 Spark 会根据转换过程所产生的 RDD 之间的依赖关系构建有向无环图。      

2、DAG 切割

DAG 切割主要根据 RDD 的依赖是否为宽依赖来决定切割节点,当遇到宽依赖就将任务划分 为一个新的调度阶段(Stage)。每个 Stage 中包含一个或多个 Task。这些 Task 将形成任务集 (TaskSet),提交给底层调度器进行调度运行。 
 
3、任务调度

每一个 Spark 任务调度器只为一个 SparkContext 实例服务。当任务调度器收到任务集后负责 把任务集以 Task 任务的形式分发至 Worker 节点的 Executor 进程中执行,如果某个任务失败, 任务调度器负责重新分配该任务的计算。 
 
4、执行任务

当 Executor 收到发送过来的任务后,将以多线程(会在启动 executor 的时候就初始化好了 一个线程池)的方式执行任务的计算,每个线程负责一个任务,任务结束后会根据任务的类 型选择相应的返回方式将结果返回给任务调度器。 

1.2、运行流程图解

1、构建 Spark Application 的运行环境(初始化 SparkContext),SparkContext 向资源管理器(可 以是 Standalone、Mesos 或 YARN)注册并申请运行 Executor 资源 
 
2、资源管理器分配 Executor 资源并启动 StandaloneExecutorBackend,Executor 运行情况将 随着心跳发送到资源管理器上 
 
3、SparkContext 构建成 DAG 图,将 DAG 图分解成 Stage,并把 Taskset 发送给 TaskScheduler。 Executor 向 SparkContext 申请 Task,TaskScheduler 将 Task 发放给 Executor 运行同时 SparkContext 将应用程序代码发放给 Executor 

4、Task 在 Executor 上运行,运行完毕释放所有资源。 

1.3、SparkContext初始化

关于 SparkContext: 

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)

初始化流程:

1、处理用户的 jar 或者资源文件,和日志处理相关 

2、初始化异步监听

### Apache Spark 执行流程详解 #### 1. SQL 解析阶段 当用户通过 Spark 提交一条 SQL 查询时,SQL 首先进入解析器 (Parser),该解析器会将字符串形式的 SQL 转换为逻辑计划 (Logical Plan)[^1]。此阶段的主要目标是验证语法正确性和语义一致性。 #### 2. Analyzer 阶段 经过解析后的逻辑计划会被传递到 Analyzer 组件,在这里会对表名、列名以及数据类型进行绑定操作,并解决未解析的对象引用问题。Analyzer 还负责处理视图展开和其他元数据查询工作[^1]。 #### 3. Optimizer 阶段 优化器 (Catalyst Optimizer) 接收来自 Analyzer 的分析完成的逻辑计划并对其进行一系列代数变换来生成更高效的物理执行方案。这些转换可能包括但不限于谓词下推、常量折叠、投影裁剪等技术手段以减少不必要的计算开销。 #### 4. Physical Planning Stage 在这个阶段中, Catalyst 将抽象出来的最佳逻辑执行路径转化为具体的 RDD 或 Dataset/DatFrame API 调用序列即所谓的 “SparkPlan”。这一步骤定义了如何实际地分布于集群之上运行作业的任务分配策略[^1]。 #### 5. Stages 划分与调度 为了提高效率和容错能力,SparK 把整个应用程序拆分成若干个小部分或者说是 stages 来分别处理不同的输入分区集合。如果存在 shuffle 操作,则意味着需要创建一个新的 stage ,因为只有当前面所有的 map 输出都已准备好之后才可以开始 reduce 计算[^3]。 #### 6. Task Execution 最后由 scheduler 向 worker 发送 task 请求去执行相应的 transformation 和 action 。每个 executor 上都会启动一定数量的核心用于并发执行 tasks [^2]。 ```python from pyspark.sql import SparkSession # 创建 Spark Session 实例 spark = SparkSession.builder.appName("example").getOrCreate() # 加载数据集 df = spark.read.format("csv").option("header", "true").load("/path/to/data") # 注册临时视图表以便后续查询使用 df.createOrReplaceTempView("table_name") # 编写 SQL 并触发执行 result_df = spark.sql(""" SELECT column_a, SUM(column_b) AS sum_b FROM table_name GROUP BY column_a """) # 展示结果 result_df.show() ``` 以上代码片段展示了从加载 CSV 文件作为 DataFrame 开始到最后展示聚合结果的过程。它涵盖了 Spark SQL 中涉及的关键步骤:读取外部存储中的数据源;注册成可供 SQL 查找使用的虚拟关系型数据库对象;编写标准结构化查询语言表达式来进行数据分析任务;最终呈现汇总统计信息给终端使用者查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值