Spark中的Driver、Executor、Stage、TaskSet、DAGScheduler等介绍

工作流程:

  1. Driver 创建 SparkSession 并将应用程序转化为执行计划,将作业划分为多个 Stage,并创建相应的 TaskSet。
  2. Driver 将 TaskSet 发送给 TaskScheduler 进行调度和执行。
  3. TaskScheduler 根据资源情况将任务分发给可用的 Executor 进程执行。
  4. Executor 加载数据并执行任务的操作,将计算结果保存在内存中。
  5. Executor 将任务的执行结果返回给 Driver。
  6. DAGScheduler 监控任务的执行状态和依赖关系,并根据需要调整任务的执行顺序和依赖关系。
  7. TaskScheduler 监控任务的执行状态和资源分配情况,负责任务的调度和重新执行。

在 Spark 中,有多个概念和组件相互协作,以实现分布式数据处理。下面是这些概念和组件的详细说明及它们之间的工作关系:

  1. Driver(驱动器):

    • Driver 是 Spark 应用程序的主要组件,负责整个应用程序的执行和协调。
    • 它包含了应用程序的主函数,并将用户程序转化为执行计划。
    • Driver 与集群管理器通信,请求资源,并监控应用程序的执行状态。
    • 它还与 Executor 进程进行通信,发送任务并接收任务执行结果。
  2. Executor(执行器):

    • Executor 是运行在集群的工作节点上的进程,负责执行任务和计算。
    • 它由集群管理器分配给应用程序,用于并行处理数据和执行操作。
    • Executor 加载数据到内存中,并根据分配的任务执行相应的操作。
    • 它将计算结果保存在内存中,并将结果返回给 Driver。
  3. Application(应用程序):

    • 应用程序是用户编写的 Spark 代码,用于数据处理和分析。
    • 应用程序由 Driver 执行,将用户定义的操作转化为执行计划。
    • 应用程序可以包含多个 Job,并且可以跨多个阶段进行分布式计算。
  4. Job(作业):

    • Job 是应用程序中的一个独立任务单元,由用户定义的操作组成。
    • Job 定义了数据的转换和操作,可以包含多个 Stage。
  5. Stage(阶段):

    • Stage 是 Job 的子任务单位,有两种类型:Shuffle Stage 和 Result Stage。
    • Shuffle Stage 包含需要进行数据洗牌的操作,如 groupByKey、reduceByKey 等。
    • Result Stage 包含没有数据洗牌的操作,如 map、filter 等。
    • Stage 通过依赖关系构成有向无环图(DAG),描述了数据的转换和操作流程。
  6. TaskSet(任务集合):

    • TaskSet 是一个 Stage 中所有任务的集合。
    • TaskSet 中的任务是并行执行的,每个任务对应一部分数据的处理。
    • TaskSet 由 Driver 创建,并发送给 TaskScheduler 进行调度和执行。
  7. Task(任务):

    • Task 是 Spark 中最小的执行单元,对应于一个数据分区的处理。
    • 一个 Stage 中的任务数等于分区数,每个任务负责处理一个数据分区。
    • 任务在 Executor 上执行,加载数据并执行用户定义的操作。
  8. DAGScheduler(有向无环图调度器):

    • DAGScheduler 负责将应用程序转化为有向无环图(DAG)的形式。
    • 它根据任务之间的依赖关系,将 Job 划分为多个 Stage,并确定它们的执行顺序。
    • DAGScheduler 将任务发送给 TaskScheduler 进行调度和执行。
  9. TaskScheduler(任务调度器):

    • TaskScheduler 是 Spark 中的任务调度器,负责将任务分发给 Executor 进程执行。
    • 它根据资源需求和可用资源,将任务分配给合适的 Executor 进程。
    • TaskScheduler 还负责监控任务的执行状态,处理任务失败和重试等情况。

关系:一个Driver可以产生多个Application;一个Application可以产生多个Job​​​​​​​;一个Job对应多个Stage;一个Stage对应一个TaskSet( TaskSet是Stage内部调度的基本单位**);一个Stage对应多个Task(一个TaskSet为一组Task集合);一个Task对应一个分区;**

每个Application都有自己独立的执行环境和资源分配,它们之间相互独立,互不干扰。每个Application都会有自己的SparkContext,用于与集群进行通信和资源管理。


如有错误,欢迎指出!!!

如有错误,欢迎指出!!!

如有错误,欢迎指出!!!

扩展文章推荐:

1500字带你读懂 Spark任务的角色分工! - 知乎

一篇文章搞清spark任务如何执行 - 掘金

Spark[二]------Spark的组件们[Application、Job、Stage、TaskSet、Task] - 掘金

相关推荐
字节跳动数据平台4 小时前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
得物技术5 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康6 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康1 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天1 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康3 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
肌肉娃子4 天前
20260227.spark.Spark 性能刺客:千万别在 for 循环里写 withColumn
spark
初次攀爬者4 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
武子康4 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet