Spark如何進行動態資源分配

2022-01-12 01:27:01 字數 1712 閱讀 1083

對於spark應用來說,資源是影響spark應用執行效率的乙個重要因素。當乙個長期執行的服務,若分配給它多個executor,可是卻沒有任何任務分配給它,而此時有其他的應用卻資源緊張,這就造成了很大的資源浪費和資源不合理的排程。

動態資源排程就是為了解決這種場景,根據當前應用任務的負載情況,實時的增減executor個數,從而實現動態分配資源,使整個spark系統更加健康。

首先需要對yarn進行配置,使其支援spark的shuffle service。

修改每台集群上的yarn-site.xml:

- 修改

yarn.nodemanager.aux-services

mapreduce_shuffle,spark_shuffle

- 增加

yarn.nodemanager.aux-services.spark_shuffle.class

org.apache.spark.network.yarn.yarnshuffleservice

spark.shuffle.service.port

7337

將$sparkhome/lib/spark-x.x.x-yarn-shuffle.jar拷貝到每台nodemanager的$/share/hadoop/yarn/lib/下, 重啟所有修改配置的節點。

2、spark的配置

配置$spark_home/conf/spark-defaults.conf,增加以下引數:

spark.shuffle.service.enabled true   //啟用external shuffle service服務

spark.shuffle.service.port 7337 //shuffle service預設服務埠,必須和yarn-site中的一致

spark.dynamicallocation.enabled true //開啟動態資源分配

spark.dynamicallocation.schedulerbacklogtimeout 1s

spark.dynamicallocation.sustainedschedulerbacklogtimeout 5s

使用spark-sql on yarn執行sql,動態分配資源。以yarn-client模式啟動thriftserver:

cd $spark_home/sbin/

./start-thriftserver.sh \

--master yarn-client \

--conf spark.driver.memory=10g \

--conf spark.shuffle.service.enabled=true \

--conf spark.dynamicallocation.enabled=true \

--conf spark.dynamicallocation.minexecutors=1 \

--conf spark.dynamicallocation.maxexecutors=300 \

--conf spark.dynamicallocation.sustainedschedulerbacklogtimeout=5s

啟動後,thriftserver會在yarn上作為乙個長服務來執行。

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

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

spark動態資源分配

spark動態資源調整其實也就是說的executor數目支援動態增減,動態增減是根據spark應用的實際負載情況來決定。1.將spark.dynamicallocation.enabled設定為true。意思就是啟動動態資源功能 2.將spark.shuffle.service.enabled設定為...

容器級虛擬化如何進行資源分配

我們都知道,在使用主機級虛擬化的時候,是可以直接指定cpu,記憶體的使用量的,那容器級虛擬化如何實現呢?使用的是核心支援的一種叫做control groups cgroups 來實現使用者空間的資源分配 把系統級的資源分成多個組,把每個組內的資源量分配到特定的使用者空間上去 cgroups blki...