數量 spark Spark的動態資源分配

2021-10-14 17:58:24 字數 1949 閱讀 1376

在進行spark任務提交的時候,我們知道spark提供了諸如num-executor、executor-memory等引數用來控制資源的申請和使用。但是你是否遇到過提交了任務後,當資源佇列資源充足的時候,spark任務一直在吃記憶體的情況,貌似有點失控,這其實是「動態資源分配」在作怪。

那麼什麼是動態資源分配呢,簡單來講就是spark根據資源的使用情況來申請資源,需要多少就申請多少,而不是一直獨佔配置的資源總量。在spark中,是否採用動態資源分配主要靠spark.dynamicallocation.enabled這個配置來決定。如果該值設定為true,則spark任務會根據工作負載來衡量應該增加或減少executor的數量,或者當executor有空閒的時候,就會在空閒達到有一定時間之後釋放掉。在cdh中,該引數預設為true,在開源版本中,該引數預設為false。與該引數配置相關的參如下:

spark.dynamicallocation.enabled是否開啟動態資源配置,根據工作負載來衡量是否應該增加或減少executor,預設falsespark.dynamicallocation.minexecutors動態分配最小executor個數,在啟動時就申請好的,預設0spark.dynamicallocation.maxexecutors動態分配最大executor個數,預設infinityspark.dynamicallocation.initialexecutors動態分配初始executor個數預設值=spark.dynamicallocation.minexecutorsspark.dynamicallocation.executoridletimeout當某個executor空閒超過這個設定值,就會被kill,預設60sspark.dynamicallocation.cachedexecutoridletimeout當某個快取資料的executor空閒時間超過這個設定值,就會被kill,預設infinityspark.dynamicallocation.schedulerbacklogtimeout任務佇列非空,資源不夠,申請executor的時間間隔,預設1sspark.dynamicallocation.sustainedschedulerbacklogtimeout同schedulerbacklogtimeout,是申請了新executor之後繼續申請的間隔,預設=schedulerbacklogtimeout

根據以上的配置引數,可以得出在我們日常的spark應用部署時,我們為了達到資源使用的自主可控,可以採取兩種措施:一種是將spark.dynamicallocation.enabled設定為false,這樣我們的spark任務就會嚴格按照我們的引數配置占用資源,例如占用的總資源可以大概估算=executor-memory*num_executor + driver-memory;另一種是通過設定spark.dynamicallocation.maxexecutors來限制spark任務無上限的使用佇列資源,這個引數相當於給spark任務設定了乙個資源利用上限,如果申請的總資源達到了這個標準就不再繼續申請,哪怕佇列還有資源剩餘,這也大大減少了佇列任務因為資源不夠而積壓的問題。下面兩個圖就分別展示了設定資源上限和不設資源上限所啟動的executor數量以及資源占用的不同。

總結,我們可以看到,設定了資源使用上限之後,spark任務並沒有無休止的搶占資源,這對於整個資源佇列安全穩定執行還是很重要的。

如何重啟spark Spark如何進行動態資源分配

對於spark應用來說,資源是影響spark應用執行效率的乙個重要因素。當乙個長期執行的服務,若分配給它多個executor,可是卻沒有任何任務分配給它,而此時有其他的應用卻資源緊張,這就造成了很大的資源浪費和資源不合理的排程。動態資源排程就是為了解決這種場景,根據當前應用任務的負載情況,實時的增減...

Spark spark的安裝和配置過程

上傳檔案 上傳可以使用一些遠端工具,也可已使用linux自帶的上傳工具 sudo yum install y lrzsz yum安裝linux自帶的上傳工具 rz 將檔案上傳到當前目錄下 解壓檔案 tar zxvf spark 2.2.0 bin 2.6.0 cdh5.7.6.tgz c cdh5....

動態切換 Linux 使用的 CPU 數量

動態切換 linux 使用的 cpu 數量 摘要 由於要測試一些 其執行結果會受到多核並行的影響,所以希望能夠調整使用的 cpu 數量。網路上之前看到的方法是在核心的啟動引數上新增乙個 maxcpus,但是如果這樣的話每切換一次都要重啟一次,是在太麻煩了。想 由於要測試一些 其執行結果會受到多核並行...