Yige

Yige

Build

Spark基础-Spark作业提交

Spark 基础 - Spark 作业提交#

内容整理自:

  1. Spark 架构与作业执行流程

Spark 提交作业流程#

名词概念#

  • Application: 用户编写的 Spark 应用程序,包含了一个 Driver 功能的代码和分布在集群中多个节点上运行的 Executor 代码

  • Driver: Driver 即运行上述 Application 的 main () 函数并且创建 SparkContext 准备 Spark 应用程序的运行环境。在 Spark 中由 SparkContext 负责和 ClusterManager 通信,进行资源的申请、任务的分配和监控等;当 Executor 部分运行完毕后,Driver 负责将 SparkContext 关闭。通常用 SparkContext 代表 Driver

  • Worker:集群中任何可以运行 Application 代码的节点,类似于 YARN 中的 NodeManager 节点。在 Standalone 模式中指的就是通过 Slave 文件配置的 Worker 节点,在 Spark on Yarn 模式中指的就是 NodeManager 节点

  • Executor: Application 运行在 Worker 节点上的一个进程,该进程负责运行 Task,并且负责将数据存在内存或者磁盘上,每个 Application 都有各自独立的一批 Executor

  • Cluster Manager:指的是在集群上获取资源的外部服务,目前有:

    1. Standalone:Spark 原生的资源管理,由 Master 负责资源的分配
    2. Hadoop Yarn:由 YARN 中的 ResourceManager 负责资源的分配

执行流程#

两个核心:DAGSchedulerTaskScheduler
image.png
详情见: Spark 进阶 - Spark 调度系统

Spark 三种作业提交模式#

local 模式#

  • local 模式下,没有所谓的master+worker这种概念
  • local 模式,相当于,启动一个本地进程,然后在一个进程内,模拟 spark 集群中作业的运行一个 spark 作业,就对应了进程中的一个或多个 executor 线程,就开始执行,包括作业的调度,task 分配

Standalone 提交模式#

standalone 模式提交,需要将 master 设置成 spark://master_ip,比如 spark://192.168.75.101:7077

Standalone Client 模式#

image.png

流程描述

  1. 客户端启动后直接运行用户程序,启动 Driver 相关的工作:DAGScheduler 和 BlockManagerMaster 等。

  2. 客户端的 Driver 向 Master 注册。

  3. Master 还会让 Worker 启动 Executor。Worker 创建一个 ExecutorRunner 线程,ExecutorRunner 会启动 ExecutorBackend 进程。

  4. ExecutorBackend 启动后会向 Driver 的 SchedulerBackend 注册。Driver 的 DAGScheduler 解析作业并生成相应的 Stage,每个 Stage 包含的 Task 通过 TaskScheduler 分配给 Executor 执行。

  5. 所有 stage 都完成后作业结束

Standalone Cluster 模式#

image.png

  1. 客户端提交作业给 master

  2. Master 选择一个 Worker 节点启动 Driver,即SchedulerBackend。Worker 创建一个 DriverRunner 线程,DriverRunner 启动 SchedulerBackend 进程

  3. Master 让其余 Worker 启动 Executor,即ExecutorBackend。Worker 创建一个 ExecutorRunner 线程,ExecutorRunner 会启动 ExecutorBackend 进程

  4. ExecutorBackend 启动后会向 Driver 的 SchedulerBackend 注册。SchedulerBackend 进程中包含 DAGScheduler,它会根据用户程序,生成执行计划,并调度执行。对于每个 stage 的 task,都会被存放到 TaskScheduler 中,ExecutorBackend 向 SchedulerBackend 汇报的时候把 TaskScheduler 中的 task 调度到 ExecutorBackend 执行

Standalone Client 和 Standalone Cluster 区别#

  • client mode 下,在哪台机器上用 spark-submit 脚本提交 application,driver 就会在那台机器上启动
  • cluster mode 下,driver 会通过 master 进程,随机被分配给某一个 worker 进程来启动

Yarn 提交模式#

Yarn-Client 模式#

image.png

  1. Spark Yarn Client 向 YARN 的ResourceManager申请启动Application Master

  2. ResourceManager 收到请求后,在集群中选择一个 NodeManager,为该应用程序分配第一个 Container,要求它在这个 Container 中启动应用程序的 ApplicationMaster,与 YARN-Cluster 区别的是在该 ApplicationMaster 不运行 SparkContext,只与 SparkContext 进行联系进行资源的分派

  3. Client 中的 SparkContext 初始化完毕后,与 ApplicationMaster 建立通讯,向 ResourceManager 注册,根据任务信息向 ResourceManager 申请资源(Container)

  4. ApplicationMaster 申请到资源(也就是 Container)后,便与对应的 NodeManager 通信,要求它在获得的 Container 中启动启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 启动后会向 Client 中的 SparkContext 注册并申请 Task

  5. Client 中的 SparkContext 分配 Task 给 CoarseGrainedExecutorBackend 执行,CoarseGrainedExecutorBackend 运行 Task 并向 Driver 汇报运行的状态和进度

  6. 应用程序运行完成后,Client 的 SparkContext 向 ResourceManager 申请注销并关闭自己

YARN-Cluster 模式#

image.png
在 YARN-Cluster 模式中,当用户向 YARN 中提交一个应用程序后,YARN 将分两个阶段运行该应用程序:

  • 第一个阶段是把 Spark 的 Driver 作为一个 ApplicationMaster 在 YARN 集群中先启动;
  • 第二个阶段是由 ApplicationMaster 创建应用程序,然后为它向 ResourceManager 申请资源,并启动 Executor 来运行 Task,同时监控它的整个运行过程,直到运行完成

YARN-Client 与 YARN-Cluster 区别#

  • YARN-Cluster模式下,Driver 运行在 AM (Application Master) 中,它负责向 YARN 申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉 Client,作业会继续在 YARN 上运行,因而 YARN-Cluster 模式不适合运行交互类型的作业

  • YARN-Client模式下,Application Master 仅仅向 YARN 请求 Executor,Client 会和请求的 Container 通信来调度他们工作,也就是说 Client 不能离开. Driver 运行在提交 spark 作业的客户端机器上, 可以实时看到详细的日志信息,方便追踪和排查错误,用于测试

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。