Spark架构角色及基本运行流程

2023-06-20,,

1. 集群角色

Application:基于spark的用户程序,包含了一个Driver program 和集群中多个Executor
Driver Program:运行application的main()函数并自动创建SparkContext。Driver program通过一个SparkContext对象来访问Spark,通常用SparkContext代表Driver。
SparkContext: Spark的主要入口点,代表对计算集群的一个连接,是整个应用的上下文,负责与ClusterManager通信,进行资源申请、任务的分配和监控等。
ClusterManager:在集群上获得资源的外部服务(spark standalone,mesos,yarm),Standalone模式:Spark原生的资源管理,由Master负责资源,YARN模式Yarn中的ResourceManager
Worker Node:集群中任何可运行Application代码的节点,负责控制计算节点,启动Executor或者Driver(Standalone模式:Worder,Yarn模式:NodeManager)
Executor为某个Application在worker node上执行任务的一个进程,该进程负责运行task并负责将数据存储在内存或者硬盘上,每个application都有自己独立的一组Executors。
RDD:弹性分布式数据集,是spark 的基本运算单元,通过scala集合转化读取数据集生成或者由其他RDD进过算子操作得到
Job:可以被拆分成Task并行计算的单元,一般为Spark Action触发的一次执行作业
Stage:每个Job会被拆分成很多组Task,每组任务被称为Stage,也可称TaskSet,该属于经常在日志中看到
Task:被送到executor上执行的工作单元

2. 基本运行流程

SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业和TaskScheduler任务调度两级调度模块:

DAG Scheduler:根据作业(Job)构建基于Stage的DAG,并将DAG分解成Stage以TaskSets(任务组)的形式提交给任务调度模块Task Scheduler来具体执行
Task Scheduler:将任务(Task)分发给Executor执行

详细的流程为:

    Application启动之后, 会在本地启动一个Driver进程,用于控制整个流程(假设我们使用的Standalone模式);
    初始化SparkContext构建出DAGScheduler、TaskScheduler,以SparkContext为程序运行的总入口;
    在初始化TaskSechduler的时候,它会向资源管理器(Standalone中是Master)注册Application,Master收到消息后使用资源调度算法在Spark集群的Worker上启动Executor并进行资源的分配,最后将Executor注册到TaskScheduler
    资源管理器分配Executor资源并启动StandaloneExecutorBackendExecutor运行情况将随着心跳发送到资源管理器上,到这里准备工作基本完成了;
    根据我们编写的业务,如通过sc.textFile("file")加载数据源,将数据转化为RDD;
    DAGScheduer  先按照Action将程序划分为一至多个job(每一个job对应一个DAG),之后DAGScheduer根据是否进行shuffer将job划分为多个Stage,每个Stage过程都是Taskset , DAG将Taskset交给TaskScheduler(由Work中的Executor去执行)
    Executor向SparkContext申请Task
    Task Scheduler将Task发放给Executor运行,同时SparkContext将应用程序代码发放给Executor
    Task在Executor上运行,运行完毕释放所有资源

Spark架构角色及基本运行流程的相关教程结束。

《Spark架构角色及基本运行流程.doc》

下载本文的Word格式文档,以方便收藏与打印。