spark核心架構
史上最簡單的spark教程
所有代碼示例地址:https://github.com/Mydreamandreality/sparkResearch
(提前聲明:文章由作者:張耀峯 結合自己生產中的使用經驗整理,最終形成簡單易懂的文章,寫作不易,轉載請註明)
(文章參考:Elasticsearch權威指南,Spark快速大數據分析文檔,Elasticsearch官方文檔,實際項目中的應用場景)
(幫到到您請點點關注,文章持續更新中!)
Git主頁 https://github.com/Mydreamandreality
spark在分佈式環境中是主從master/salve的結構
驅動器節點(driver)
spark的集羣中,有一個節點負責中央協調.調度各個分佈式的工作節點,就是驅動器節點(driver)
執行器節點(worker)
spark的工作節點叫做執行器節點(worker),驅動器節點可以和大量的執行器節點進行通信,都作爲獨立的Java進程裕運行,驅動器和執行器被稱爲spark程序 (application)
分佈式spark中的組件
spark的應用通過一個外部服務(cluster manager)集羣管理器在集羣中的機器上啓動,
spark自帶的集羣管理器被稱爲獨立集羣管理器
spark能運行在hadoop.yanr和apache mesos這兩大開源集羣管理器上
詳細介紹
驅動器節點:
- spark驅動器是執行我們代碼中main方法的進程,它執行我們創建sparkcontext,創建RDD,轉換操作,行動操作的代碼
- 當我們啓動spark-shell的時候,我們就已經啓動了spark驅動器,[spark-shell會預先加載sparkcontext對象],驅動器一旦停止,spark應用就結束了
驅動器在spark中的兩個主要職責
一:把用戶程序轉成任務
- spark驅動器程序把用戶的程序轉成多個物理執行的單元,這些單元也叫作task任務
- 從上層看,所有的spark程序都遵循同樣的結構
- 程序獲取數據源
- 創建RDD
- 轉換操作生成新的RDD
- 行動操作收集或者存儲RDD
- spark程序其實是隱式的創建了操作組成的邏輯上的有向無環圖
- 當驅動程序執行時,再把邏輯圖轉成物理執行計劃
二:爲執行器節點調度任務
- 有了物理執行計劃之後,spark驅動器必須在各執行器進程間協調任務的調度,執行器的進程啓動之後,會向驅動器進程註冊自己,所以驅動器對所有應用中的執行器節點有完整的記錄,每個執行器的節點都代表能夠處理任務和存儲RDD數據的進程
- spark驅動器程序會根據當前的執行器節點集合,嘗試把所有任務基於數據所在的位置分配給合適的執行器進程,當任務執行的時候,執行器會把這些數據緩存起來,驅動器程序還會跟蹤數據緩存,以達到下次的任務通過數據所在位置進行調度,以減少數據的網絡傳輸
- 驅動器程序會將一些spark應用運行時的信息通過網頁呈現
- 可視化界面和監控後面單獨拉一章出來講一下把
執行器節點:
- spark執行器節點是一種工作進程,負責在spark作業中運行任務,任務之間是相互獨立的,當spark應用啓動時,執行器節點就被同時啓動,並且隨着spark程序的生命週期而存在或者關閉
- 如果有某個執行器節點發生異常崩潰了,spark程序依然可以正常運行
執行器在spark中的兩個主要職責
一:運行spark任務task
- 執行器的主要職責就是運行spark的task任務,並且把結果返回給驅動器進程
二:緩存
- 執行器通過自身的塊管理器 block manager,爲程序中要求緩存的RDD提供內存式的緩存,是直接緩存到執行器進程的內存中,所以在任務執行時可以充分利用緩存數據運算
集羣管理器
- 在spark中,我們依賴於集羣管理器來啓動執行器節點,但是在某些特定的情況下,我們也依賴外部的集羣管理器啓動我們的驅動器節點
- 集羣管理器是什麼?
- 集羣管理器是spark中的可插拔式組件
- 比如 yarn或者mesos
外部集羣管理器yarn等,這個我們會在後續章節中詳細講解
感興趣的同學請點個關注哦,持續更新