Spark的資源排程

2021-08-31 09:25:29 字數 2473 閱讀 4767

7、加深理解

val works = new hashset[workinfo]()

val waitingdrivers = new arraybuffer[driverinfo]()

(可能直接看下面的知識點會有點迷惑,若不理解可以結合第三部分的流程圖一起看)

works 集合採用hashset陣列儲存work的節點資訊,可以避免存放重複的work節點。為什麼要避免重複?首先我們要知道work節點有可能因為某些原因掛掉,掛掉之後下一次與master通訊時會報告給master,這個節點掛掉了,然後master會在works物件裡把這個節點去掉,等下次再用到這個節點是時候,再加進來。這樣來說,理論上是不會有重複的work節點的。可是有一種特殊情況:work掛掉了,在下一次通訊前又自己啟動了,這時works裡面就會有重複的work資訊。

val waitingdrivers = new arraybuffer[driverinfo]()

master並不是分出來執行緒專門的對這三個集合進行監控,相對而言這樣是比較浪費資源的。master實際上是『監控』這三個集合的改變,當這三個集合中的某乙個集合發生變化時(新增或者刪除),那麼就會呼叫schedule()方法。schedule方法中封裝了上面提到的處理邏輯。

3、預設情況下,executor的啟動方式是輪詢啟動,一定程度上有利於資料的本地化。

什麼是輪詢啟動???為什麼要輪訓啟動呢???

輪詢啟動:輪詢啟動就是乙個個的啟動。例如這裡有5個人,每個人要發乙個蘋果+乙個香蕉。輪詢啟動的分發思路就是:五個人先一人分乙個蘋果,分發完蘋果再分發香蕉。

為什麼要使用輪詢啟動的方式呢???我們做大資料計算首先肯定想的是計算找資料。在資料存放的地方直接計算,而不是把資料搬過來再計算。我們有n臺worker節點,如果只是在資料存放的節點計算。只用了幾台worker去計算,大部分的worker都是閒置的。這種方案肯定不可行。所以我們就使用輪詢方式啟動executor,先在每一台節點都允許乙個任務。

存放資料的節點由於不需要網路傳輸資料,所以肯定速度快,執行的task數量就會比較多。這樣不會浪費集群資源,也可以在存放資料的節點進行計算,在一定程度上也有利於資料的本地化。

在任務執行之前,會先將資源申請完畢,當所有的task執行完畢,才會釋放這部分資源。

優點:每乙個task執行前。不需要自己去申請資源了,節省啟動時間。

缺點:等到所有的task執行完才會釋放資源,集群的資源就無法充分利用。

這裡有幾個小問題,益腦遊戲。。。

前提條件:假設我們有5個worker,每個worker節點提供10g記憶體,10個core。

1、spark-submit --master … --executor-cores 2 --executor-memory 2g … 在集群中會啟動多少個executor程序???

答:25

分析:每個executor程序使用2個core+2g記憶體。所以1臺worker節點可以啟動5個executor。因為有5臺worker節點。所以共可以啟動5*5=25個executor程序。

2、spark-submit --master … --executor-cores 3 --executor-memory 4g … 在集群中會啟動多少個executor程序???

答:隨機找兩台worker節點。

分析:這個題和上一題的思路完全一樣。因為core數限制,不能啟動25個executor,只能啟動4/2=2個executor程序。因為spark的任務啟動方式是輪詢啟動,所以會隨機找兩台worker節點啟動executor。

5、啟動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

分析:min(wm/em,wc/ec):根據要求的core數和記憶體容量,得到一台節點可以啟動executor的兩個數值。這兩個數取小值。

x1 = min(wm/em,wc/ec)*wn:一台worker節點的executor數*worker結點數=可以啟動的總的executor數。

x2 = tec/ec:根據要求的總core數求出來可以啟動的executor總數。

min(min(wm/em,wc/ec)*wn,tec/ec) == min(x1,x2):上面求出來的兩個executor數量取小值。

spark資源排程和任務排程

資源排程 1 executor預設在集群中分散啟動,可通過引數配置集中在某個work啟動,不過分散啟動有利於資料本地化。2 如果spark submit提交任務時,如果不指定 executor cores,則spark會在每個work中啟動乙個executor並消耗掉work中的所有core和1g的...

Spark資源排程和任務排程概述

以standalone client模式為例,序列圖如下 圖中 1 6 資源排程 7 11 任務排程 spark資源排程和任務排程的流程 總結 taskscheduler不僅可以重試失敗的task,還可以重新執行緩慢的task,這是spark中的推測執行機制,預設關閉,對於資料清洗的場景要關閉,防止...

spark資源排程與yarn模擬

spark資源排程與yarn模擬 master負責資源排程 就是決定在那些worker上啟動executor,監控worker yarn上的是resourcemanager worker負責啟動執行任務的程序 executor 並且監控executor,並且將當前機器的資訊通過心跳匯報給master...