spark内核

spark组件

1、Driver

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

  1. 将用户程序转化为作业(Job);
  2. 在 Executor 之间调度任务(Task);
  3. 跟踪 Executor 的执行情况;
  4. 通过 UI 展示查询运行情况;

2、Executor

Spark Executor 对象是负责在 Spark 作业中运行具体任务,任务彼此之间相互独立。Spark 应用启动时,ExecutorBackend 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周 期而存在。如果有 ExecutorBackend 节点发生了故障或崩溃,Spark 应用也可以继续执行, 会将出错节点上的任务调度到其他 Executor 节点上继续运行。 Executor 有两个核心功能:

  1. 负责运行组成 Spark 应用的任务,并将结果返回给驱动器(Driver);
  2. 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存 式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存 数据加速运算。

3、调度流程

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

spark部署

Spark 支持多种集群管理器(Cluster Manager),分别为:

  1. Standalone:独立模式,Spark 原生的简单集群管理器,自带完整的服务,可单独部署到
    一个集群中,无需依赖任何其他资源管理系统,使用 Standalone 可以很方便地搭建一个
    集群;
  2. Hadoop YARN:统一的资源管理机制,在上面可以运行多套计算框架,如 MR、Storm
    等。根据 Driver 在集群中的位置不同,分为 yarn client(集群外)和 yarn cluster(集群
    内部)
  3. Apache Mesos:一个强大的分布式资源管理框架,它允许多种不同的框架部署在其上,
    包括 Yarn。
  4. K8S : 容器式部署环境。
    实际上,除了上述这些通用的集群管理器外,Spark 内部也提供了方便用户测试和学习
    的本地集群部署模式和 Windows 环境。由于在实际工厂环境下使用的绝大多数的集群管理
    器是 Hadoop YARN,因此我们关注的重点是 Hadoop YARN 模式下的 Spark 集群部署。

1、YARN Cluster 模式

  1. 执行脚本提交任务,实际是启动一个 SparkSubmit 的 JVM 进程;
  2. SparkSubmit 类中的 main 方法反射调用 YarnClusterApplication 的 main 方法;
  3. YarnClusterApplication 创建 Yarn 客户端,然后向 Yarn 服务器发送执行指令:bin/java
    ApplicationMaster;
  4. Yarn 框架收到指令后会在指定的 NM 中启动 ApplicationMaster;
  5. ApplicationMaster 启动 Driver 线程,执行用户的作业;
  6. AM 向 RM 注册,申请资源;
  7. 获取资源后 AM 向 NM 发送指令:bin/java YarnCoarseGrainedExecutorBackend;
  8. CoarseGrainedExecutorBackend 进程会接收消息,跟 Driver 通信,注册已经启动的
    Executor;然后启动计算对象 Executor 等待接收任务
  9. Driver 线程继续执行完成作业的调度和任务的执行。
  10. Driver 分配任务并监控任务的执行。

注意:SparkSubmit、ApplicationMaster 和 CoarseGrainedExecutorBackend 是独立的进程;Driver是独立的线程;Executor 和 YarnClusterApplication 是对象。

2、YARN Client 模式

  1. 执行脚本提交任务,实际是启动一个 SparkSubmit 的 JVM 进程;
  2. SparkSubmit 类中的 main 方法反射调用用户代码的 main 方法;
  3. 启动 Driver 线程,执行用户的作业,并创建 ScheduleBackend;
  4. YarnClientSchedulerBackend 向 RM 发送指令:bin/java ExecutorLauncher;
  5. Yarn 框架收到指令后会在指定的 NM 中启动 ExecutorLauncher(实际上还是调用
    ApplicationMaster 的 main 方法);
object ExecutorLauncher {
 def main(args: Array[String]): Unit = {
 ApplicationMaster.main(args)
 }}
  1. AM 向 RM 注册,申请资源;
  2. 获取资源后 AM 向 NM 发送指令:bin/java CoarseGrainedExecutorBackend;
  3. CoarseGrainedExecutorBackend 进程会接收消息,跟 Driver 通信,注册已经启动的
    Executor;然后启动计算对象 Executor 等待接收任务
  4. Driver 分配任务并监控任务的执行。

注意:SparkSubmit、ApplicationMaster 和 YarnCoarseGrainedExecutorBackend 是独立的进程;Executor 和 Driver 是对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值