閱讀377 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go 雲效專場直播4月開啟,讓企業沒有難做的研發效能
  下一篇:go DB2(三)——權限(authentication)