調研公司內部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個.