天天看點

《Spark與Hadoop大資料分析》一一3.3 Spark 程式的生命周期

本節書摘來自華章計算機《spark與hadoop大資料分析》一書中的第3章,第3.3節,作者:文卡特·安卡姆(venkat ankam) 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

以下步驟講解了配備 standalone 資料總管的 spark 應用程式的生命周期,圖3-8 顯示了spark程式的排程過程:

《Spark與Hadoop大資料分析》一一3.3 Spark 程式的生命周期

(1)使用者使用 spark-submit 指令送出一個 spark 應用程式。

(2)spark-submit 在同一節點(用戶端模式)或叢集(叢集模式)上啟動驅動程序,并調用由使用者指定的 main 方法。

(3)驅動程序聯系叢集管理器,根據提供的配置參數來請求啟動執行程序 jvm 所需的資源。

(4)叢集管理器在工作機節點上啟動執行程序 jvm。

(5)驅動程序掃描使用者應用程式。根據程式中的 rdd 動作和變換,spark 會建立一個運算圖。

(6)當調用一個動作(如 collect)時,圖會被送出到一個有向無環圖(dag)排程程式。dag 排程程式将運算圖劃分成一些階段。

(7)一個階段由基于輸入資料分區的任務組成。dag 排程程式會通過流水線把運算符連一起,進而優化運算圖。例如,很多映射(map)運算符可以排程到一個階段中。這種優化對 spark 的性能是很關鍵的。dag 排程程式的最終結果是一組階段。

(8)這些階段會被傳遞到任務排程程式。任務排程程式通過叢集管理器(spark standalone / yarn / mesos)啟動任務。任務排程器并不知道階段之間的依賴性。

(9)任務在執行程序上運作,進而計算和儲存結果。

(10)如果驅動程序的 main 方法退出,或者它調用了 sparkcontext.stop(),它就會終止執行程序并從叢集管理器釋放資源。

圖3-8描述了 spark 程式的排程過程:

《Spark與Hadoop大資料分析》一一3.3 Spark 程式的生命周期

3.3.1 流水線

在某些情況下,各階段的實體集合不一定會完全和邏輯 rdd 圖做到 1:1 對應。當無需移動資料就能根據其父節點計算出 rdd 時,就可以産生流水線。例如,當使用者順序地調用 map 和 filter 時,那些調用就可以被折疊成單個變換,它先映射再過濾每個元素。但是,複雜的 rdd 圖會由 dag 排程器劃分為多個階段。

利用 1.4 及更高版本的 spark 管理界面,spark 的事件時間軸和 dag 可視化變得容易了。讓我們執行以下代碼來檢視一個作業及其各階段的 dag 可視化:

《Spark與Hadoop大資料分析》一一3.3 Spark 程式的生命周期

圖3-9 顯示了上面的單詞計數代碼作業及其各階段的可視化 dag。它顯示作業被分為兩個階段,因為在這種情況下發生了資料的混排。

《Spark與Hadoop大資料分析》一一3.3 Spark 程式的生命周期

3.3.2 spark 執行的摘要

在此簡要說明 spark 執行摘要:

使用者代碼定義 rdd 的 dag(有向無環圖)

動作強制将 dag 轉換為執行計劃

任務在叢集上排程和執行

繼續閱讀