val works = new hashset[workinfo]() //儲存worker節點資源資訊
val waitingdrivers = new arraybuffer[driverinfo]() //儲存driver節點申請的資源資訊
val works = new hashsetworkinfo
works 集合採用hashset陣列儲存work的節點資訊,可以避免存放重複的work節點.(worker節點在異常掛掉以後,在下一次通訊中,會將worker的節點資訊從set集合中刪除,但是如果worker節點掛掉後,在下一次通訊之前又恢復工作,那麼set中的節點資訊是不會被刪除的)
val waitingdrivers = new arraybufferdriverinfo
當客戶端向master為driver申請資源時,會將要申請的driver的相關資訊封裝到master節點的driverinfo這個泛型裡,然後新增到waitingdrivers 裡。master會監控這個waitingdrivers 物件,當waitingdrivers集合中的元素不為空時,說明有客戶端向master申請資源了。此時應該先檢視一下works集合,找到符合要求的worker節點,啟動driver。當driver啟動成功後,會把這個申請資訊從waitingdrivers 物件中移除。
注意點:上面說到master會監控這三個集合,那麼到底是怎麼監控的呢???
master並不是分出來執行緒專門的對這三個集合進行監控,相對而言這樣是比較浪費資源的。master實際上是『監控』這三個集合的改變,當這三個集合中的某乙個集合發生變化時(新增或者刪除),那麼就會呼叫schedule()方法。schedule方法中封裝了上面提到的處理邏輯。
假設我們有5個worker,每個worker節點提供10g記憶體,10個core。
1、spark-submit --master … --executor-cores 2 --executor-memory 2g … 在集群中會啟動多少個executor程序???
252、spark-submit --master … --executor-cores 3 --executor-memory 4g … 在集群中會啟動多少個executor程序???
105、啟動executor個數的公式:*min(min(wm/em,wc/ec)wn,tec/ec)
注:–executor-cores : ec
--executor-memory : em
--total-executor-cores : tec
worker_num : wn
worker_memory : wm
worker_core : wc
spark 資源引數調優
了解完了spark作業執行的基本原理之後,對資源相關的引數就容易理解了。所謂的spark資源引數調優,其實主要就是對spark執行過程中各個使用資源的地方,通過調節各種引數,來優化資源使用的效率,從而提公升spark作業的執行效能。以下引數就是spark中主要的資源引數,每個引數都對應著作業執行原理...
大資料學習筆記(六) Spark的RDD
建立 rdd是spark中的資料集,是唯讀的 rdd可以從集合,普通檔案系統,hdfs檔案系統中建立 scala建立rdd的方法 val lines1 sc.parallelize list aa bb val lines2 sc.textfile file opt spark readme.md ...
Spark調優(一)資源優化篇
關於spark調優相關事宜,本章先自萬物起始之初,集群的資源優化講起。可以在 master 之後 class之前指定如下引數 driver cores 指定driver端使用的core數。driver memory 指定driver端使用的記憶體數,如果driver端有 資料廣播的時候,可以多申請記...