史上最簡單的spark教程第十四章-Spark核心架構之運行原理與架構

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等,這個我們會在後續章節中詳細講解

在這裏插入圖片描述


感興趣的同學請點個關注哦,持續更新
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章