Spark Job (thrift-server) 動態分配資源
阿新 • • 發佈:2019-01-09
專案中使用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,空閒時回收。