1. 程式人生 > >調研公司內部Spark叢集能承受多少併發量

調研公司內部Spark叢集能承受多少併發量

任務描述

測試公司內部Spark叢集能承受多少併發量

 

Spark叢集分配引數

節點數:5

cpu:20核

記憶體:40g

硬碟:500g

 

每臺節點分配引數

cpu:4核

記憶體:8g

硬碟:100g

 

測試案例(通過spark叢集自帶WEBUI進行監控任務提交執行狀態)

1.編寫測試程式1,無限迴圈通過Spark restful API 提交任務到spark叢集執行,每個任務申請worker數1個,cpu:1核,記憶體:1g,driver端 cpu:核,記憶體1g,程式只提交spark任務不進行任務讀取檔案和處理分析操作,申請到資源就立馬釋放

2.編寫測試程式2,條件同上,然後每個任務讀取指定檔案進行分詞計數,並且上一個任務提交後休眠1-2秒再進行提交下一個任務

3.編寫測試程式3,提交2個任務,第一個任務先提交併申請spark叢集所有資源,然後提交第二個任務,第二個任務也要獲取spark叢集所有資源

4.編寫測試程式4,提交2個任務,第一個任務先提交併申請spark叢集50%資源,然後提交第二個任務,第二個任務也要獲取spark叢集50%資源

5.編寫測試程式5,提交2個任務,第一個任務先提交併申請spark叢集70%資源,然後提交第二個任務,第二個任務也要獲取spark叢集70%資源

 

測試目的:

1.測試公司內部Spark叢集同一時間能執行多少個spark任務

2.多個spark任務若能同時進行,執行速度怎麼樣

3.在spark叢集無資源可申請的同時又有任務提交,spark叢集會採取怎麼操作

4.若提交一個任務,spark叢集只能滿足其一部分申請,這個任務該如何進行

 

測試結果

測試案例1:

提交任務速度太快,當提交到20個任務的時候,spark叢集資源完全分配完,後續任務直接卡死

(一個任務最少要佔兩個CPU,一個driver端cpu,一個worker佔用的cpu,提交任務時先申請driver端,延遲1-2秒後再去申請這個driver端的worker節點)

後續任務卡死的原因:

spark叢集的所有cpu都分配給前20個任務的driver端了,沒有多餘的資源去分配給其他任務,也沒有一點資源為前20個任務繼續分配worker節點,結果就卡死了

 

測試案例2:

當提交到10個任務的時候,spark叢集完全分配完,後續任務進入等待狀態,當前10個任務中有某個任務執行結束了,後續任務就會按序號繼續申請spark資源進行執行

 

測試案例3

第一個任務佔用完spark叢集所有資源,第二個任務直接進入等待狀態,等待第一個任務執行完再進行申請資源

 

測試案例4

兩個任務可以一起執行在spark叢集上

 

測試案例5

第一個任務申請70%資源,第二個任務繼續申請到30%資源,一起執行在spark叢集上,當第一個任務結束後,spark叢集會繼續分配多出來的資源給第二個任務

 

備註:公司內部叢集配置只適合測試環境,為保證提交的任務都能快速執行(分配4核4g)建議同時執行任務不超過4-5個.