spark的excutor調優思路

spark的excutor調優主要考慮兩種資源:內存和cpu核心數

優先保證程序可運行的情況下增加excutor數量

在spark中,一個excutor是一個進程,是內存資源分配的基本單位。理論上excutor的數量可以非常大,但是yarn有資源管理的功能,如果excutor佔用的資源超過了集羣擁有的資源,多餘的進程會被掛起。所以第一原則是單個excutor分配的資源要滿足程序運行要求的情況下儘量的小,excutor的數量儘量多。

在滿足程序可正確運行的基礎上,提高並行數。也是就每個excutor的核心數

如果excutor是一個進程的話,那excutor的核心就是該線程的進程了。同一個線程的進程是共享資源的。

折中策略

我們說多個核心是共享內存的,也就意味着,如果我們增加每個excutor的核心數,我們就要增加excutor的內存大小,那excutor的數量就該減少。那我們是該以多進程(多 excutor)爲主呢,還是以多線程(多核心)爲主呢。

有一個簡單的excutor的內存估算策略:

Executor所需最小內存 
=  併發任務數 * 單分區大小 + 內存緩存分區數 * 單分區大小 
= (核心數 + 內存緩存分區數) * 單個分區大小

由上面的內存估算策略可知,核心數對內存分配的影響是非常小的。所以我們只需要單個核心的情況下能跑通程序,那多個核心一般以沒什麼問題。

但是如果按照官網的建議:

Spark作業的默認task數量爲500~1000個較爲合適
每個Spark作業的運行一般設置50~100個左右的Executor進程比較合適
Executor的CPU core數量設置爲2~4個較爲合適。

這樣平均下來 每個excutor也就只分配10到20個task和cpu core數量是同一個量級,這樣盲目增大cpu core核心數可能會導致內存不足。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章