一、Spark内核之运行机制

Spark内核系列目录

一、Spark内核的运行机制

二、Spark内核的通讯架构


前言

Spark内核一般指Spark的核心运行机制,包括核心组件的运行机制、任务调度机制、内存管理机制、核心功能运行原理。


一、Spark核心组件

1.Driver

Driver是Spark的驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:
  • 将用户程序转化为作业(Job)
  • 在Executor之间调度任务(Task)
  • 跟踪Executor执行情况
  • 通过UI展示查询运行情况

2. Executor

Spark Executor对象是负责在Spark作业中执行具体任务,每个任务之间相互独立。Spark应用启动时,ExecutorBackend节点同时被启动,而且始终伴随着Spark应用的生命周期而存在。如果有ExecutorBackend节点发生了故障或崩溃,Spark也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续执行。 Executor有两个核心功能:
  • 负责运行组成Spark应用的任务,并将结果返回给驱动器(Driver)
  • 他们通过块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

3. Spark运行流程

Spark运行流程
spark应用程序核心运行步骤如下:

  • 任务提交,启动Driver程序;
  • Driver集群管理器注册应用程序;
  • 集群管理器根据任务配置分配Executor并启动;
  • Driver执行main函数,执行到Action算子时开始反向推算,根据宽依赖进行划分Stage,每个Stage对应一个Taskset,其中Taskset中有多个Task,查找可用资源Executor进行调度
  • 根据本地化原则Task会被分发到指定的Executor去执行,在任务执行的过程中,Executor也会不断与Driver进行通信,报告任务运行状况

二、Spark部署方式

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

1)、Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需其他资源管理系统。

2)、Hadoop YARN:统一的资源管理机制,可运行多个计算框架。Driver在集群中的位置可分为:yarn client(集群外)与yarn cluster(集群内)。

3)、Apache Mesos:强大的分布式资源管理框架,允许多个不同的框架部署在上面,包括YARN。

4)、K8S:容器化部署环境。

此外,Spark还提供了方便用户测试学习的本地集群部署模式与Windows环境,Hadoop YARN部署方式是企业最常用的。

三、YARN模式运行机制

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是对象。

yarn cluster

2、YARN Client模式

(1)执行脚本提交任务,实际是启动一个SparkSubmit的JVM进程;

(2)SparkSubmit类中的main方法反射调用用户代码的main方法;

(3)启动Driver线程,执行用户的作业,并创建ScheduleBackend;

(4)YarnScheduleBackend想RM发送指令:bin/java ExecutorLauncher;

(5)Yarn框架收到指令后会指定NM中启动ExecutorLauncher(实际上还是调用ApplicationMaster的main方法);
object ExecutorLauncher {
	def main(args: Array[String]): Unit = {
		ApplicationMaster.main(args)
	}
}
(6)AM向RM注册,申请资源;

(7)获取资源后AM向NM发送指令:bin/java CoarseGrainedExecutorBackend;

(8)CoarseGrainedExecutorBackend进程会接收信息,和Driver通信,注册已经启动的Executor,然后启动计算对象Executor等待接收任务

(9)Driver分配任务并监控任务的执行。

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

yarn client

总结

本章主要介绍了Spark的运行机制,分别从组件角度、运行流程角度及Yarn部署模式角度详细介绍了任务调度机制、资源分配方式等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值