Spark 核心概念:Master、Worker、Driver Program、Executor、RDDs

一、Master

         Spark 特有资源调度系统的 Leader,掌管着整个集群的资源信息(Standalone模式),类似于 Yarn 集群中的ResourceManager。

主要功能:

  1. 监听 Worker,看集群中的 Worker 是否正常工作;
  2. 管理 Worker、Application(接收 Worker 的注册并管理所有的 Worker;接收 Client 提交的 Application,调度等待的Application 并向Worker提交)。

二、Worker

         Spark 特有资源调度系统的 Slaver,一个集群中有多个 Slaver(Standalone),每个 Slaver 掌管着所在节点的资源信息,类似于 Yarn 框架中的 NodeManager。

主要功能:

  1. 通过 RegisterWorker 注册到 Master;
  2. 定时发送心跳给 Master;
  3. 根据 Master 发送的 Application 配置进程环境,并启动 ExecutorBackend(执行 Task 所需的临时进程)。

三、Driver Program(驱动程序)

        每个 Spark 应用程序都包含一个驱动程序,驱动程序负责把并行操作发布到集群上。驱动程序包含 Spark 应用程序中的main()函数。在 WordCount 案例中,spark-shell 就是我们的驱动程序,所以我们可以在其中键入我们任何想要的操作,然后由它负责发布。驱动程序通过 SparkContext 对象来访问 Spark,SparkContext 对象相当于一个到 Spark 集群的连接(用它来连接Spark集群)。

四、Executor(执行器)

           SparkContext 对象一旦成功连接到集群管理器, 就可以获取到集群中每个节点上的执行器(Executor)。执行器是一个进程(进程名: ExecutorBackend, 运行在 Worker 节点上),用来执行计算和为应用程序存储中间数据。

           Spark 会发送应用程序代码(比如:jar包)到每个执行器,最后,SparkContext 对象发送任务到执行器开始执行程序。

 

Master、Worker、Driver Program、Executor之间的关系:

Spark 核心概念:Master、Worker、Driver Program、Executor、RDDs

五、RDD(Resilient Distributed Dataset) 弹性分布式数据集

         RDD 是 Spark 对数据的核心抽象,其实就是分布式的元素集合。在 Spark 中,对数据的所有操作不外乎创建 RDD、转化已有RDD 以及调用 RDD 操作进行求值。而在这一切背后, Spark 会自动将 RDD 中的数据分发到集群上,并将操作并行化执行。

         Spark 中 RDD 是一种不可变的分布式对象集合,所以,对 RDD 的每一个操作都会生成一个新的 RDD。

六、专业术语列表

术语 含义

Application

基于 Spark 构建的用户程序,一般包括了集群上的一个 driver 程序与多个 executor。

Application jar

包含了用户的 Spark application 的一个 jar 包。

Driver program

运行 application 的 main() 函数和创建 SparkContext 的进程.

Cluster manager

获取集群资源的一个外部服务, 比如 standalone 管理器, Mesos 和 YARN.

Deploy mode

区分 driver 进程在何处运行. 在 “cluster” 模式下, 框架在集群内部运行 driver. 在 “client” 模式下, 提交者在集群外部运行 driver.

Worker node

集群内任一能够运行 application 代码的节点

Executor

在 worker node 上 application 启动的一个进程, 该进程运行 task 并在内存或磁盘上保存数据. 每个 application 都有其独有的 executor.

Task

发送到一个 executor 的一系列工作

Job

由多个 task 组成的一个并行计算, 这些 task 产生自一个 Spark action (比如, save, collect) 操作.

Stage

每个 job 被分解为多个 stage, 每个 stage 其实就是一些 task 的集合, 这些 stage 之间相互依赖 (与 MapReduce 中的 map 与 reduce stage 类似),执行过程中,每碰到一个shuffle就是一个stage。