組件
Spark應用程序運行在集群上的獨立進程中,由驅動程序中的SparkContext對象調度。
SparkContext可以連接到幾種集群管理器(例如Standalone,Mesos和YARN),這些集群管理器可以為應用程序分配資源。連接完成后,Spark從集群節(jié)點上申請executor,它負責執(zhí)行計算過程并存儲數(shù)據(jù)。接著Spark將應用程序代碼發(fā)送到各個executor中。最后,SparkContext將task發(fā)送給executor執(zhí)行。

image
有幾點需要注意:
- 每個應用程序都有自己的executor進程,這些executor會一直存在直到應用程序終結,并以多線程方式執(zhí)行task。這樣的好處是可以從調度層面(驅動程序調度任務)和executor層面(不同應用程序的task運行在不同的JVM中)上彼此隔離。同時也意味著數(shù)據(jù)無法跨應用程序共享,除非將數(shù)據(jù)寫入外部存儲系統(tǒng)。
- Spark對底層的集群管理器一無所知。只要它能夠申請executor進程,讓executor彼此間通信,就可以運行在各種集群管理器上。
- 驅動程序必須能夠監(jiān)聽并接收來自executor的連接請求。
- 因為驅動程序在集群上調度task,所以它最好離工作節(jié)點足夠近,最好是同一局域網(wǎng)。
術語
下面列出了Spark常用定義:
- Application:用戶代碼,由驅動程序和executor組成。
- Application jar:包含Spark應用程序的jar包。
- Driver Program:執(zhí)行應用程序
main()函數(shù)的進程,負責創(chuàng)建SparkContext。 - Cluster manager:申請資源的外部服務(例如Standalone,Mesos和YARN)。
- Deploy mode:分為集群模式和本地模式。
- Worker node:集群中可以執(zhí)行應用程序的節(jié)點。
- Executor:在工作節(jié)點上負責執(zhí)行任務的進程。
- Task:發(fā)送給executor的工作單元。
- Job:由多個任務組成的并行計算,這些任務對應著Spark的action算子(例如
save,collect)。可以在驅動日志中看到這個術語。 - Stage:每個job會分成幾個彼此依賴的stage。