Spark整体架构:
![](https://img.haomeiwen.com/i2240277/b15eb256fbc343af.png)
在分布式环境下,Spark集群采用的是主从结构。在一个Spark程序中,有一个节点负责中央协调,调度各个分布式工作节点,这个中央协调节点被称为驱动器(Driver)节点,与之对应的工作节点被称为执行器( executor)节点。驱动器节点可以和大量执行器节点进行通信,它们也都作为独立的java程序运行。驱动器节点和和所有的执行器节点一起被称为一个Spark应用(application)。Spark应用通过一个集群管理器的外部服务再集群的机器上启动(如:Hadoop Yarn)
驱动器节点
Spark驱动器是执行程序中main()方法的进程。它执行用户编写的用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作的代码。
驱动器程序在Spark应用中有以下两个职责
- 把用户程序转为任务:
Spark驱动器程序负责把用户程序转换成多个物理执行的单元(task)。从上层看,所有的Spark程序都遵循同样的结构:程序从输入数据创建一系列RDD,再使用转化操作派生出新的RDD,最后使用行动操作收集或存储结果RDD中的数据。Spark程序其实是隐式的创建出了一个由操作组成的逻辑上的有向无环图(DAG)。当驱动器程序运行时,它会把这个逻辑图转为物理执行计划。 - 为执行器节点调度任务:
有了物理执行计划后,Spark驱动器程序必须在各执行器进程协调任务的调度。执行器进程启动后会向驱动器进程注册自己。因此驱动器进程始终对应用中的所有执行器节点有完整的记录。每个执行器节点代表一个能够处理任务和存储RDD数据的进程。
Spark驱动器程序会根据当前的执行器节点集合,尝试把所有任务基于数据所在位置分配给合适的执行器程序。当任务执行时,执行器进程会把缓存数据存储起来,而驱动器进程同样跟踪这些缓存数据的位置,并且利用这些位置信息来调度以后的任务,以尽量减少数据的网络传输。
执行器节点
Spark 执行器节点是一种工作进程,负责在 Spark 作业中运行任务,任务间相互独立。
Spark 应用启动时, 执行器节点就被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有执行器节点发生了异常或崩溃, Spark 应用也可以继续执行。执行器进程有两大作用: 第一,它们负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;第二,它们通过自身的块管理器( Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。 RDD 是直接缓存在执行器进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
网友评论