在本文中我们将从Spark集群角度和程序应用的角度来对相关概念进行了解
一. 站在集群角度
1.1 Master
Spark 特有资源调度系统的 Leader。掌管着整个集群的资源信息,类似于 Yarn 框架中的 ResourceManager,主要功能:
- 监听 Worker,看 Worker 是否正常工作;
- Master 对 Worker、Application 等的管理(接收 Worker 的注册并管理所有的Worker,接收 Client 提交的 Application,调度等待的 Application 并向Worker 提交)。
1.2 Worker
Spark 特有资源调度系统的 Slave,有多个。每个 Slave 掌管着所在节点的资源信息,类似于 Yarn 框架中的 NodeManager,主要功能:
- 通过 RegisterWorker 注册到 Master;
- 定时发送心跳给 Master;
- 根据 Master 发送的 Application 配置进程环境,并启动 ExecutorBackend(执行 Task 所需的临时进程)
二. 站在应用程序角度
2.1 driver program(驱动程序)
每个 Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作。驱动器程序包含应用的 main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作。
驱动程序包含 Spark 应用程序中的主函数, 定义了分布式数据集以应用在集群中.
驱动器程序通过一个 SparkContext
对象来访问 Spark。这个对象代表对计算集群的一个连接。
使用Scala初始化SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._val conf = new SparkConf().setAppName("wordCount")
val sc = new SparkContext(conf)
2.2 executor(执行器)
SparkContext
对象一旦成功连接到集群管理器, 就可以获取到集群中每个节点上的执行器(executor
).
执行器是一个进程(进程名: ExecutorBackend, 运行在 Worker 节点上), 用来执行计算和为应用程序存储数据.
然后, Spark 会发送应用程序代码(比如:jar包)到每个执行器. 最后, SparkContext
对象发送任务到执行器开始执行程序.
2.3 RDDs(Resilient Distributed Dataset) 弹性分布式数据集
一旦拥有了SparkContext
对象, 就可以使用它来创建 RDD 了. 在前面的例子中, 我们调用sc.textFile(…)来创建了一个 RDD, 表示文件中的每一行文本. 我们可以对这些文本行运行各种各样的操作.
2.4 cluster managers(集群管理器)
为了在一个 Spark 集群上运行计算, SparkContext对象可以连接到几种集群管理器(Spark’s own standalone cluster manager, Mesos or YARN).
集群管理器负责跨应用程序分配资源.