Spark on yarn 動態資源配置
一、YARN的配置
首先需要對YARN進行配置,使其支持Spark的Shuffle Service。
修改每台集群上的yarn-site.xml
:
- 修改
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle,spark_shuffle</value>
</property>
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 增加
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>spark.shuffle.service.port</name>
<value>7337</value>
</property>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
將$SPARK_HOME/lib/spark-1.5.2-yarn-shuffle.jar
拷貝到每台NodeManager的${HADOOP_HOME}/share/Hadoop/yarn/lib/
下。
重啟所有修改配置的節點。
二、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.minExecutors 1 //每個Application最小分配的executor數
spark.dynamicAllocation.maxExecutors 30 //每個Application最大並發分配的executor數
spark.dynamicAllocation.schedulerBacklogTimeout 1s
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 5s
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
動態資源分配策略:
開啟動態分配策略後,application會在task因沒有足夠資源被掛起的時候去動態申請資源,這種情況意味著該application現有的executor無法滿足所有task並行運行。spark一輪一輪的申請資源,當有task掛起或等待spark.dynamicAllocation.schedulerBacklogTimeout
(默認1s)`時間的時候,會開始動態資源分配;之後會每隔spark.dynamicAllocation.sustainedSchedulerBacklogTimeout(默認1s)時間申請一次,直到申請到足夠的資源。每次申請的資源量是指數增長的,即1,2,4,8等。
之所以采用指數增長,出於兩方麵考慮:其一,開始申請的少是考慮到可能application會馬上得到滿足;其次要成倍增加,是為了防止application需要很多資源,而該方式可以在很少次數的申請之後得到滿足。
資源回收策略:
當application的executor空閑時間超過spark.dynamicAllocation.executorIdleTimeout(默認60s)
後,就會被回收。
使用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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
啟動後,ThriftServer會在Yarn上作為一個長服務來運行:
最後更新:2017-04-14 16:00:21