在本文中我們將從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).
??集群管理器負責跨應用程序分配資源.