1. 程式人生 > >Spark Job (thrift-server) 動態分配資源

Spark Job (thrift-server) 動態分配資源

專案中使用spark 自帶的thrift-server做hdfs資料查詢統計服務。當資料過多時,thrift-server 需要分配大量的資源,當不需要查詢時分配當量的資源又顯得非常浪費,因此想到是否有可能動態分配資源。
(thrift-server也是一個job(yarn app),因此這種方法同樣適用於一般的spark job)。
目前動態資源分配只適合spark on yarn,配置方式如下。

yarn node manager 配置

修改所有節點yarn node-manager配置,在$HADOOP_HOME/etc/hadoop/yarn-site.xml中新增:

    <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>

$SPARK_HOME/lib/spark-1.3.0-yarn-shuffle.jar copy到 $HADOOP_HOME/share/hadoop/yarn/lib 目錄下。

重啟yarn。

spark-default配置

修改 $SPARK_HOME/conf/spark-default.conf 檔案,新增以下內容:

spark.shuffle.service.enabled true
spark.shuffle.service.port 7337 
spark.dynamicAllocation.enabled true
spark.dynamicAllocation
.minExecutors 1 spark.dynamicAllocation.maxExecutors 12 spark.dynamicAllocation.schedulerBacklogTimeout 1 spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 5 spark.dynamicAllocation.cachedExecutorIdleTimeout 60

驗證

這裡使用spark中內建的thrift-server驗證。
啟動thrift-server,只配置 --executor-memory 引數。
sbin/start-thriftserver.sh --master yarn-client --executor-memory 1g
通過application UI可看到executors分配,當有併發查詢或者查詢壓力比較大時,會申請更多的executor,空閒時回收。