天天看點

《Spark大資料處理:技術、應用與性能優化》——1.3 Spark架構

本節書摘來自華章計算機《spark大資料處理:技術、應用與性能優化》一書中的第1章,第1.3節,作者:高彥傑 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

從上文介紹可以看出,spark是整個bdas的核心。生态系統中的各個元件通過spark來實作對分布式并行任務處理的程式支援。

1.spark的代碼結構

圖1-3展示了spark-1.0的代碼結構和代碼量(不包含test和sample代碼),讀者可以通過代碼架構對 spark的整體元件有一個初步了解,正是這些代碼子產品構成了spark架構中的各個元件,同時讀者可以通過代碼子產品的脈絡閱讀與剖析源碼,這對于了解spark的架構和實作細節都是很有幫助的。

下面對圖1-3中的各子產品進行簡要介紹。

scheduler:檔案夾中含有負責整體的spark應用、任務排程的代碼。

broadcast:含有broadcast(廣播變量)的實作代碼,api中是java和python api的實作。

《Spark大資料處理:技術、應用與性能優化》——1.3 Spark架構

https://yqfile.alicdn.com/c35a2a9b4eaba833f0c5434b81d38830ce8601d1.png

" >

deploy:含有spark部署與啟動運作的代碼。

common:不是一個檔案夾,而是代表spark通用的類和邏輯實作,有5000行代碼。

metrics:是運作時狀态監控邏輯代碼,executor中含有worker節點負責計算的邏輯代碼。

partial:含有近似評估代碼。

network:含有叢集通信子產品代碼。

serializer:含有序列化子產品的代碼。

storage:含有存儲子產品的代碼。

ui:含有監控界面的代碼邏輯。其他的代碼子產品分别是對spark生态系統中其他元件的實作。

streaming:是spark streaming的實作代碼。

yarn:是spark on yarn的部分實作代碼。

graphx:含有graphx實作代碼。

interpreter:代碼互動式shell的代碼量為3300行。

mllib:代表mllib算法實作的代碼量。

sql代表spark sql的代碼量。

2.spark的架構

spark架構采用了分布式計算中的master-slave模型。master是對應叢集中的含有master程序的節點,slave是叢集中含有worker程序的節點。master作為整個叢集的控制器,負責整個叢集的正常運作;worker相當于是計算節點,接收主節點指令與進行狀态彙報;executor負責任務的執行;client作為使用者的用戶端負責送出應用,driver負責控制一個應用的執行,如圖1-4所示。

《Spark大資料處理:技術、應用與性能優化》——1.3 Spark架構

spark叢集部署後,需要在主節點和從節點分别啟動master程序和worker程序,對整個叢集進行控制。在一個spark應用的執行過程中,driver和worker是兩個重要角色。driver 程式是應用邏輯執行的起點,負責作業的排程,即task任務的分發,而多個worker用來管理計算節點和建立executor并行處理任務。在執行階段,driver會将task和task所依賴的file和jar序列化後傳遞給對應的worker機器,同時executor對相應資料分區的任務進行處理。

下面詳細介紹spark的架構中的基本元件。

clustermanager:在standalone模式中即為master(主節點),控制整個叢集,監控worker。在yarn模式中為資料總管。

worker:從節點,負責控制計算節點,啟動executor或driver。在yarn模式中為nodemanager,負責計算節點的控制。

driver:運作application的main()函數并建立sparkcontext。

executor:執行器,在worker node上執行任務的元件、用于啟動線程池運作任務。每個application擁有獨立的一組executors。

sparkcontext:整個應用的上下文,控制應用的生命周期。

rdd:spark的基本計算單元,一組rdd可形成執行的有向無環圖rdd graph。

dag scheduler:根據作業(job)建構基于stage的dag,并送出stage給taskscheduler。

taskscheduler:将任務(task)分發給executor執行。

sparkenv:線程級别的上下文,存儲運作時的重要元件的引用。

sparkenv内建立并包含如下一些重要元件的引用。

mapoutputtracker:負責shuffle元資訊的存儲。

broadcastmanager:負責廣播變量的控制與元資訊的存儲。

blockmanager:負責存儲管理、建立和查找塊。

metricssystem:監控運作時性能名額資訊。

sparkconf:負責存儲配置資訊。

spark的整體流程為:client 送出應用,master找到一個worker啟動driver,driver向master或者資料總管申請資源,之後将應用轉化為rdd graph,再由dagscheduler将rdd graph轉化為stage的有向無環圖送出給taskscheduler,由taskscheduler送出任務給executor執行。在任務執行的過程中,其他元件協同工作,確定整個應用順利執行。

3.spark運作邏輯

如圖1-5所示,在spark應用中,整個執行流程在邏輯上會形成有向無環圖(dag)。action算子觸發之後,将所有累積的算子形成一個有向無環圖,然後由排程器排程該圖上的任務進行運算。spark的排程方式與mapreduce有所不同。spark根據rdd之間不同的依賴關系切分形成不同的階段(stage),一個階段包含一系列函數執行流水線。圖中的a、b、c、d、e、f分别代表不同的rdd,rdd内的方框代表分區。資料從hdfs輸入spark,形成rdd a和rdd c,rdd c上執行map操作,轉換為rdd d, rdd b和 rdd e執行join操作,轉換為f,而在b和e連接配接轉化為f的過程中又會執行shuffle,最後rdd f 通過函數saveassequencefile輸出并儲存到hdfs中。

《Spark大資料處理:技術、應用與性能優化》——1.3 Spark架構

https://yqfile.alicdn.com/6ad8398c666ce8066975b325095e32b0c3f713be.png

繼續閱讀