重拾Spark 之day03--Spark的运行原理与角色
简单梳理下Spark的程序的运行原理与Spark各阶段的各个角色。
- 构建Spark Application运行环境;在Driver Program中新建SparkContext(包含SparkContext的程序称为Driver Program);Spark Application 运行的表现方式为:在集群上运行着一组独立的executor进程,这些进程由SparkContext来协调;简单来说,SparkContext 是程序的主入口。
- SparkContext向资源管理器申请运行Executor资源,并启动StandaloneExecutorBackend,executor向SparkContext申请task;集群通过SparkContex连接到不同的cluster manager(standalone、yarn、mesos),cluster manager为运行应用的Executor分配资源;一旦连接建立之后,Spark每个Application就会获得各个节点上的Executor进程;Executor才是真正运行在WorkNode上的工作进程,它们为应用来计算或者存储数据。
- SparkContext获取到executor之后,Application的应用代码将会被发送到各个executor。
- SparkContext构建RDD DAG图,将RDD DAG图分解成Stage DAG图,将Stage提交给TaskScheduler,最后由TaskScheduler将Task发送给Executor运行。
- Task在Executor上运行,运行结束后释放所有资源。
- Driver Program :运⾏main 函数并且新建 SparkContext 的程序(初始化工作)。
- Application:基于 Spark 的应用程序,包含了 driver 程序和集群上的executor(代码逻辑与运行资源)。
-
Cluster Manager:指的是在集群上获取资源的外部服务(提供外部运行资源,资源分配)。目前有三种类型
(1)Standalone: spark 原生的资源管理,由 Master 负责资源的分配
(2)Apache Mesos:与 hadoop MR 兼容性良好的一种资源调度框架
(3)Hadoop Yarn: 主要是指 Yarn 中的 ResourceManager - Master:集群中老大,负责资源的分配和任务的调度
- Worker Node: 集群中任何可以运行 Application 代码的节点(小弟),在Standalone 模式中指的是通过 slaves 文件配置的 Worker 节点,在 Spark on Yarn模式下就是 NodeManager 节点
- Executor:是在一个 worker node 上为某应⽤启动的⼀个进程,该进程负责运⾏行任务,并且负责将数据存在内存或者磁盘上。每个应⽤都有各自独立的executor(运行当前任务所需要的资源)。
- Task :被送到某个 executor 上的工作单元(线程),是Spark实际执行应用的最小单元。
- Cache:Spark 中设置的数据缓存
- Job:RDD中由Action算子所生成的一个或多个Stage。
- Stage:每个Job会因为RDD之间的依赖关系拆分成多组任务集合,称为Stage。Stage的划分是由DAGScheduler来划分的,有Shuffle Map Stage 和 Result Stage两种。
- DAGScheduler:DAGScheduler是面向Stage的任务调度器,负责接收Spark应用提交的Job,根据RDD的依赖关系划分Stage,并提交Stage给TaskScheduler。
-
TaskScheduler:TaskScheduler是面向Task的调度器,它接收DAGScheduler提交过来的Stage,然后把Task分发到Worker节点运行,由Worker节点的Executor来运行该任务。
详细步骤: