2016-05-13 2 views
3

Я развертывал пример SparkPi в кластере из 8 узлов. Похоже, что задачи, связанные с этим примером, не развертываются ко всем узлам кластера, хотя кластер недостаточно используется (другие задания не выполняются).Заставить YARN для развертывания задач Spark для всех подчиненных устройств

Вот как я начала SparkPi пример:

spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --executor-cores 1 --num-executors 7 $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar 100000 

Однако, когда я смотрю на какие узлы в настоящее время используются, это то, что я вижу: hadoop cluster

У меня есть чувство, что это потому что я использую CapacityScheduler в диспетчере ресурсов. Вот мой yarn-site.xml файл:

<configuration> 
    <property> 
     <name>yarn.nodemanager.aux-services</name> 
     <value>mapreduce_shuffle</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.hostname</name> 
     <value>master.cluster</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.address</name> 
     <value>master.cluster:8032</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.scheduler.address</name> 
     <value>master.cluster:8030</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.webapp.address</name> 
     <value>0.0.0.0:8088</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.resource-tracker.address</name> 
     <value>master.cluster:8031</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.admin.address</name> 
     <value>master.cluster:8033</value> 
    </property> 
    <property> 
     <name>yarn.resourcemanager.admin.address</name> 
     <value>master.cluster:8033</value> 
    </property> 

    <property> 
     <name>yarn.application.classpath</name> 
     <value>/usr/local/hadoop/etc/hadoop, /usr/local/hadoop/share/hadoop/common/*, /usr/local/hadoop/share/hadoop/common/lib/*, /usr/local/hadoop/share/hadoop/hdfs/*, /usr/local/hadoop/share/hadoop/hdfs/lib/*, /usr/local/hadoop/share/hadoop/mapreduce/*, /usr/local/hadoop/share/hadoop/mapreduce/lib/*, /usr/local/hadoop/share/hadoop/yarn/*, /usr/local/hadoop/share/hadoop/yarn/lib/*</value> 
    </property> 

    <property> 
    <description> 
     Number of seconds after an application finishes before the nodemanager's 
     DeletionService will delete the application's localized file directory 
     and log directory. 

     To diagnose Yarn application problems, set this property's value large 
     enough (for example, to 600 = 10 minutes) to permit examination of these 
     directories. After changing the property's value, you must restart the 
     nodemanager in order for it to have an effect. 

     The roots of Yarn applications' work directories is configurable with 
     the yarn.nodemanager.local-dirs property (see below), and the roots 
     of the Yarn applications' log directories is configurable with the 
     yarn.nodemanager.log-dirs property (see also below). 
    </description> 
    <name>yarn.nodemanager.delete.debug-delay-sec</name> 
    <value>600</value> 
    </property> 

</configuration> 

Как я могу настроить НИТИ так, чтобы она развертывает задачи между всеми узлов?

ответ

0

Ответ был достаточно прост, в $HADOOP_PREFIX/etc/hadoop/capacity-scheduler.xml вы можете изменить значение по умолчанию 0.1 к 1:

<configuration> 

    <property> 
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name> 
    <value>1</value> 
    <description> 
     Maximum percent of resources in the cluster which can be used to run 
     application masters i.e. controls number of concurrent running 
     applications. 
    </description> 
    </property> 

</configuration> 

Хотя кластер только позволит один мастер-приложения для запуска в то время (мое предпочтение), он будет использовать весь кластер.

0
  1. Менеджер приложений не должен занимать много ресурсов. Объявить, что назначить слишком 100%, действительно много. Я не знаю, что хорошего вы сделали здесь (подозревая, что нет).
  2. You должен предпочитают запускать как можно больше задач на том же узле до тех пор, пока доступны ресурсы. Это позволит избежать накладных расходов на сериализацию и отправку данных по внутренней сети кластера. Вы также должны использовать как можно больше задач в одном экземпляре исполнителя, чтобы обеспечить совместное использование памяти.
  3. при использовании планировщика мощности в настройках по умолчанию он вычисляет ресурсы только на основе объема памяти и игнорирует след ЦП. вы объявляете объем памяти как часть вашей конфигурации и параметров Spark для драйвера, диспетчера приложений (am) и исполнителя. Более подробную информацию см. В руководствах по искровым разрядам, в частности the part about running Spark on Yarn и Spark Configuration. Конкретные искровые конфигурации:
    1. spark.yarn.am.memory (конфигурация)
    2. spark.driver.memory (конфигурация)
    3. spark.executor.memory (конфигурация)

Обратите внимание, что параметры количества ядер также важны, но больше используются самой искры, а не пряжей (если вы не измените способ вычисления ресурса).

Если вы можете выполнить одно задание, требующее 32 ядра ЦП на одном узле, то прежде всего поздравляю вас с вашей хорошей системой, но это, вероятно, так, как вы хотите ее запустить!

+0

Я на самом деле использую кластер для обучения нейронной сети, и это не производственная система. В этом случае чем больше я могу нажать кластер, тем лучше. Помогает ли это с контекстом? В противном случае, полностью согласен. – crockpotveggies

+0

Как можно больше задач под одним исполнителем.Не знаю базовой программной архитектуры нейронной сети, но я уверен, что она поможет вам в производительности. Если бы это была традиционная искра, я бы сказал, чтобы сказать вам, что ваш сорт и перетасовка будут очень быстрыми. – YoYo

Смежные вопросы