Sparkのこれらのこと(四)--Spark on yarnダイナミックリソース構成

2377 ワード

一、YARNの構成はまず、SparkのShuffle ServiceをサポートするようにYARNを構成する必要がある.
各クラスタの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

$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

動的リソース割当ポリシー:動的割当ポリシーをオンにすると、アプリケーションはtaskが十分なリソースがないため保留中にリソースを動的に申請します.これは、アプリケーションの既存のexecutorがすべてのtask並列実行を満たすことができないことを意味します.sparkは1ラウンド1ラウンドの申請リソースで、taskがspark.dynamicAllocation.schedulerBacklogTimeout(デフォルト1 s)`の時間を保留または待機している場合、動的リソース割り当てを開始します.その後はsparkごとにdynamicAllocation.S u s tainedSchedulerBacklogTimeout(デフォルト1 s)は、十分なリソースが申請されるまで1回申請します.申請ごとの資源量は指数的に増加した,すなわち1,2,4,8などである.指数成長を採用したのは、2つの面から考えられている.1つは、アプリケーションがすぐに満たされる可能性があることを考慮したことだ.次に倍増するのは、アプリケーションを防止するために多くのリソースが必要であり、この方法は少ない回数の申請後に満足することができる.
リソース回収ポリシー:アプリケーションの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

起動すると、ThriftServerはYarn上で長いサービスとして実行されます.