Я хочу использовать функцию динамического размещения от spark для отправленных приложений, но приложения не масштабируются.
Мой кластер состоит из 3 узлов, каждый из которых имеет:
- 4 ядра
- 8 ГБ ОЗУ
- искра: 1,6
- ПРЯЖА + 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
Что я не так сделал, что искра не выделяла автоматически максимум доступных ресурсов?
Спасибо за помощь :)