我想为我提交的应用程序使用spark的动态分配功能,但应用程序无法扩展。
我的集群由3个节点组成,每个节点都有:
- 4芯
- 8GB内存
- 火花:1.6
- YARN+MapReduce2:2.7
我使用hdp 2.4,并按如下方式设置所有需要的动态分配属性(它们在hdp中预先配置,但我用文档进行了验证):
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.initialExecutors=5
-spark.dynamicAllocation.maxExecutors=10
-
spark.dynamicAllocation.minExecutors=1
-
spark.shuffle.service.enabled=true
yarn.nodemanager.aux-services=mapreduce_shuffle,spark_shuffle
yarn.nodemanager.aux-services.spark_shuffle.class=org.apache.spark.network.yarn.YarnShuffleService
我使用yarn ResourceManager UI来查找使用过的核心。
当我提交以下PI示例时,只使用了3个容器,每个容器有1个核心。那里有足够的资源可以分配,但没有使用更多的资源。
./bin/spark-submit --class org.apache.spark.examples.SparkPi
--master yarn-cluster
--deploy-mode cluster
--driver-memory 512m
--executor-memory 512m
lib/spark-examples*.jar 10000
当我测试提交具有定义数量的执行器的PI示例时,可以分配更多的资源。在这个例子中,它静态地分配8个容器,每个容器有1个核心。(1名驾驶员+7名执行人员)
./bin/spark-submit --class org.apache.spark.examples.SparkPi
--master yarn-cluster
--num-executors 7
--driver-memory 512m
--executor-memory 512m
lib/spark-examples*.jar 100000
我做错了什么,火花没有自动分配最大的可用资源?
感谢您的帮助:)
我认为这个博客(http://jerryshao.me/architecture/2015/08/22/spark-dynamic-allocation-investigation/)可以帮助你。你的申请最多可以申请10名执行人,但不需要那么多执行人。
当想要将--num executor参数运行到动态分配模式时,不应该指定该参数。