1. 程式人生 > >四、spark叢集架構

四、spark叢集架構

spark叢集架構官方文件:http://spark.apache.org/docs/latest/cluster-overview.html

叢集架構

我們先看這張圖

這張圖把spark架構拆分成了兩塊內容:

1)spark應用程式:即左邊的DriverProgram這塊;

2)spark 叢集:即右邊的ClusterManager和另外兩個Worker Node;

這樣的結構,我們大概可以猜測一下spark是怎麼工作的。首先我們會編寫一個spark程式,然後啟動spark叢集,這個spark程式需要和spark叢集互動並讓spark叢集執行計算並最終產生結果。

下面,分別看看什麼是spark程式,什麼是spark叢集

什麼是spark應用程式?

spark應用程式指的就是我們編寫程式程式碼,我們的程式程式碼會包含一個驅動程式Driver,有了這個Driver它會呼叫程式的main方法去啟動我們的程式,並建立一個SparkContext。

當我們的sparkContext建立完成之後,我們的程式就可以通過sparkContext和Spark叢集進行互動了。

如:Driver -> 呼叫main() -> 建立sparkContext -> 與spark叢集互動

什麼是spark叢集?

spark叢集分為三種執行模式:standalone、yarn、mesos

為了排除干擾因素,我們這裡只以standalone來理解spark叢集

我們先看上圖右側部分,spark叢集分為兩部分:Cluster Manager和兩個WorkNode。這個結構就是一個很明顯的master-slaver(主從)的結構,由master來負責資源管理,而slaver來負責執行相應的任務。

sparkContext在與Cluster Manager建立連線以後就會向Cluster Manager申請資源,之後sparkContext把程式程式碼解析成一些task,並把這些task分發給WorkNode讓WorkNode去執行task。直到所有的task執行完畢以後,sparkContext會登出,並釋放資源。

如:sparkContext -> 連線ClusterManager -> 申請資源 -> 解析成多個task -> 分發給workNode -> 執行task -> 執行完畢釋放資源

總結

當前Driver啟動以後,會去執行應用程式的main方法,並構建sparkConext物件。sparkContext與ClusterManager連線互動,並且sparkContext將程式程式碼解析成多個task,將task傳送給workNode,workNode又會把task丟給任務執行器executor去執行,executor會啟動執行緒池開始執行task。當所有的task執行完畢,spark向ClusterManager登出,並釋放資源。

下面是spark叢集架構的一些概念:

Application 使用者程式設計的spark程式. 包含一個Driver驅動程式和executor要執行的程式碼
Application jar 一個包含spark應用程式的jar包
Driver program 驅動程式,包含在application當中,用於執行main方法和建立sparkContext。注意:Driver可以執行在Client中,也可以執行在master中。例如,當使用spark-shell提交spark job的時候Driver執行在master上,當使用spark-submit提交或者IDEA開發的時候Driver執行在Client上
Cluster manager spark叢集,可以執行在standalone、yarn、mesos
Deploy mode 部署模式,分為單機部署、偽分散式、完全分散式
Worker node spark的叢集的從節點,用於執行任務
Executor 任務的執行器
Task application的程式碼被解析成許多task,併發送給executor去執行
Job 當碰到action操作的時候就會催生job,job中包含著多個task平行計算
Stage task的組
Client     客戶端程式,用於提交spark job