У меня проблема с повторной балансировкой ресурсов ресурсов Apache Spark на YARN Fair Scheduled очередей.YARN не вытесняет ресурсы на основе справедливых акций при запуске Spark job
Для тестов я настроил Hadoop 2.6 (попробовал 2.7 также) для запуска в псевдораспределенном режиме с локальной HDFS на MacOS. Для подачи заявки используется «Pre-build Spark 1.4 для Hadoop 2.6 и более поздних версий» (также попробовал 1.5) с Spark's website.
При тестировании с базовой конфигурацией по заданиям Hadoop MapReduce, Fair Scheduler работает так, как ожидалось: когда ресурсы кластера превышают некоторый максимум, справедливые доли вычисляются, а ресурсы для заданий в разных очередях выгружаются и балансируются на основе этих вычислений.
Те же испытания выполняются с заданиями Spark, и в этом случае YARN делает правильные вычисления справедливых акций для каждой работы, но ресурсы для контейнеров Spark не перебалансируются.
Вот мои конф файлы:
$ HADOOP_HOME/и т.д./Hadoop/пряжа-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
</configuration>
$ HADOOP_HOME/и т.д./Hadoop/справедливой scheduler.xml
<?xml version="1.0" encoding="UTF-8"?>
<allocations>
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<queue name="prod">
<weight>40</weight>
<schedulingPolicy>fifo</schedulingPolicy>
</queue>
<queue name="dev">
<weight>60</weight>
<queue name="eng" />
<queue name="science" />
</queue>
<queuePlacementPolicy>
<rule name="specified" create="false" />
<rule name="primaryGroup" create="false" />
<rule name="default" queue="dev.eng" />
</queuePlacementPolicy>
</allocations>
$ HADOOP_HOME/и т.д./Hadoop/ядро-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
$ HADOOP_HOME/и т.д./Hadoop/ядро-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
И тестовый пример:
Выполнить задание на "прод" очереди с весом 40 (необходимо выделить 40% всех ресурсы), как и ожидалось, работа требует всех необходимых бесплатных ресурсов (62,5% ресурсов кластеров).
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue prod \
lib/spark-examples*.jar 100000
После этого запустить ту же самую работу по очереди «dev.eng» с весом 60, что означает работу должны выделить 60% всех ресурсов и уменьшения ресурсов первого задания, чтобы ~ 40%.
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue dev.eng \
lib/spark-examples*.jar 100000
К сожалению, ресурсы кластера не изменяются - 62,5% для первой работы и 37,5% для второй.
Фактически он убивает контейнеры на первом задании. Все зависит от того, как вы настроили превенцию. – tk421