在本文中我们将从Spark集群角度和程序应用的角度来对相关概念进行了解
Spark 特有资源调度系统的 Leader。掌管着整个集群的资源信息,类似于 Yarn 框架中的 ResourceManager,主要功能:
Spark 特有资源调度系统的 Slave,有多个。每个 Slave 掌管着所在节点的资源信息,类似于 Yarn 框架中的 NodeManager,主要功能:
每个 Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作。驱动器程序包含应用的 main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作。 驱动程序包含 Spark 应用程序中的主函数, 定义了分布式数据集以应用在集群中.
驱动器程序通过一个 SparkContext
对象来访问 Spark。这个对象代表对计算集群的一个连接。
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)
SparkContext
对象一旦成功连接到集群管理器, 就可以获取到集群中每个节点上的执行器(executor
).
执行器是一个进程(进程名: ExecutorBackend, 运行在 Worker 节点上), 用来执行计算和为应用程序存储数据.
然后, Spark 会发送应用程序代码(比如:jar包)到每个执行器. 最后, SparkContext
对象发送任务到执行器开始执行程序.
一旦拥有了SparkContext
对象, 就可以使用它来创建 RDD 了. 在前面的例子中, 我们调用sc.textFile(…)来创建了一个 RDD, 表示文件中的每一行文本. 我们可以对这些文本行运行各种各样的操作.
为了在一个 Spark 集群上运行计算, SparkContext对象可以连接到几种集群管理器(Spark’s own standalone cluster manager, Mesos or YARN). 集群管理器负责跨应用程序分配资源.