1. 程式人生 > >Spark一些基礎原理——資源排程

Spark一些基礎原理——資源排程

自學知識:RDD的生命週期,DAG任務排程

lv0

在Spark中,資源排程是Master負責管理的,Worker通過註冊的形式在Master註冊相關資源。而在執行過程中,是通過sc即Driver向Master申請計算資源(Master根據叢集設定啟動不同的Driver,對於Standalone而言Driver是在提交任務的本地環境,而對於Cluster而言是由Master分配到某一個Worker執行,Driver在Master註冊後會向Master申請計算資源),Master分配計算任務資源Executor註冊給Driver,並由Driver分配到各個Worker執行tasks,tasks會獲取datablock建立RDD而後根據DAG分配Stage進行計算,最終彙總results得到結果。
而在Master分配Exector時,一般為先過濾Alive狀態Exector放入HashMap中,根據指定的策略(均衡呼叫還是依次佔用)對資源進行分配,分配時也是打亂分配的。Exector註冊給Driver後,Driver向每個Tasks對應的Exector傳送LaunchTask以執行Task任務。Exector預設的堆空間大小為512M,預設只允許使用90%的Safe空間,而在Safe空間中預設為20%用於shuffle,60%用於storage,而storage中20%用於序列化。一般情況下需要綜合考慮storage和shuffle對記憶體的空間的消耗。
此外,Spark在資料來源呼叫上,優先呼叫本地資源和依賴jar包。如若可以儘可能在本地構建資料快取。讀寫資料可以基於磁碟、記憶體以及OffHeap(即堆外記憶體),通過BlockManager進行管理。