spark运行流程

spark运行流程

在这里插入图片描述

  1. 任务提交后,先启动 Driver 程序
  2. 随后 Driver 向集群管理器注册应用程序
  3. 集群管理器根据此任务的配置文件分配 Executor 并启动
  4. Driver 开始执行 main 函数,Spark 查询为懒执行,当执行到 Action 算子时开始反向推
    算,根据宽依赖进行 Stage 的划分,随后每一个 Stage 对应一个 Taskset,Taskset 中有多个 Task
  5. 查找可用资源 Executor 进行调度
  6. 根据本地化原则,Task 会被分发到指定的 Executor 去执行
  7. 任务执行的过程中,Executor 也会不断与 Driver 进行通信,报告任务运行情况
    进行通信,报告任务运行情况
### 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、付费专栏及课程。

余额充值