Задание MapReduce зависает, ожидая выделения контейнера AM

Я попытался выполнить простой подсчет слов как задание MapReduce. Все работает нормально, когда выполняется локально (все работы выполняются с именем Node). Но, когда я пытаюсь запустить его в кластере с использованием YARN (добавление mapreduce.framework.name= yarn в mapred-site.conf), зависает.

Я столкнулся с аналогичной проблемой: Задания MapReduce застряли в состоянии Accepted

Выход из задания:

*** START ***
15/12/25 17:52:50 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/12/25 17:52:51 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
15/12/25 17:52:51 INFO input.FileInputFormat: Total input paths to process : 5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: number of splits:5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1451083949804_0001
15/12/25 17:52:53 INFO impl.YarnClientImpl: Submitted application application_1451083949804_0001
15/12/25 17:52:53 INFO mapreduce.Job: The url to track the job: http://hadoop-droplet:8088/proxy/application_1451083949804_0001/
15/12/25 17:52:53 INFO mapreduce.Job: Running job: job_1451083949804_0001

mapred-site.xml:

<configuration>

<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

<property>
   <name>mapreduce.job.tracker</name>
   <value>localhost:54311</value>
</property> 

<!--
<property>
   <name>mapreduce.job.tracker.reserved.physicalmemory.mb</name>
   <value></value>
</property>

<property>
   <name>mapreduce.map.memory.mb</name>
   <value>1024</value>
</property>

<property>
   <name>mapreduce.reduce.memory.mb</name>
   <value>2048</value>
</property>    

<property>
   <name>yarn.app.mapreduce.am.resource.mb</name>
   <value>3000</value>
   <source>mapred-site.xml</source>
</property> -->

</configuration>

пряжа site.xml

<configuration>
 <property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
 </property>
 <property>
   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
   <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 </property>

<!--
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3000</value>
<source>yarn-site.xml</source>
</property>

<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>500</value>
</property>

<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>3000</value>
</property>
-->

</configuration>

//Я оставлял комментарии в комментариях - они не решали проблему

YarnApplicationState: ACCEPTED: ожидание размещения контейнера AM, запуск и регистрация в RM.

YarnApplicationState: ACCEPTED: ожидание размещения контейнера AM, запуск и регистрация в RM.

В чем может быть проблема?

EDIT:

Я пробовал эту конфигурацию (прокомментировал) на машинах: NameNode (ОЗУ 8 ГБ) + 2x DataNode (4 ГБ ОЗУ). Я получаю тот же эффект: Работа зависает в состоянии ACCEPTED.

EDIT2: измененная конфигурация (спасибо @Manjunath Ballur):

пряжи site.xml:

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-droplet</value>
  </property>

  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop-droplet:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop-droplet:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop-droplet:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop-droplet:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop-droplet:8088</value>
  </property>
  <property>
    <description>Classpath for typical applications.</description>
    <name>yarn.application.classpath</name>
    <value>
        $HADOOP_CONF_DIR,
        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
        $YARN_HOME/*,$YARN_HOME/lib/*
    </value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/1/yarn/local,/data/2/yarn/local,/data/3/yarn/local</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/1/yarn/logs,/data/2/yarn/logs,/data/3/yarn/logs</value>
  </property>
  <property>
    <description>Where to aggregate logs</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/var/log/hadoop-yarn/apps</value>
  </property>
  <property> 
    <name>yarn.scheduler.minimum-allocation-mb</name> 
    <value>50</value>
  </property>
  <property> 
    <name>yarn.scheduler.maximum-allocation-mb</name> 
    <value>390</value>
  </property>
  <property> 
    <name>yarn.nodemanager.resource.memory-mb</name> 
    <value>390</value>
  </property>
</configuration>

mapred-site.xml:

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<property>  
    <name>yarn.app.mapreduce.am.resource.mb</name>  
    <value>50</value>
</property>
<property> 
    <name>yarn.app.mapreduce.am.command-opts</name> 
    <value>-Xmx40m</value>
</property>
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>50</value>
</property>
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>50</value>
</property>
<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx40m</value>
</property>
<property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx40m</value>
</property>
</configuration>

Все еще не работает. Дополнительная информация: Я не вижу узлов в предварительном просмотре кластера (аналогичная проблема здесь: Ведомые узлы не в Yarn ResourceManager) введите описание изображения здесь

Ответ 1

Вы должны проверить статус менеджеров Node в своем кластере. Если узлы NM ограничены дисковым пространством, тогда RM отметит их "нездоровыми", и эти NM не могут выделять новые контейнеры.

1) Проверьте нездоровые узлы: http://<active_RM>:8088/cluster/nodes/unhealthy

Если на вкладке "отчет о состоянии здоровья" указано, что "локальные диски плохие", значит, вам нужно очистить некоторое пространство на диске от этих узлов.

2) Проверьте свойство DFS dfs.data.dir в hdfs-site.xml. Он указывает местоположение в локальной файловой системе, где хранятся данные hdfs.

3) Войдите в эту машину и используйте команды df -h и hadoop fs - du -h для измерения занимаемого пространства.

4) Проверьте hasoop trash и удалите его, если он блокирует вас. hadoop fs -du -h /user/user_name/.Trash и hadoop fs -rm -r /user/user_name/.Trash/*

Ответ 2

Я чувствую, что вы неправильно настроили свои настройки памяти.

Чтобы понять настройку конфигурации YARN, я нашел, что это очень хороший источник: http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_yarn_tuning.html

Я выполнил инструкции, приведенные в этом блоге, и смог выполнить мои задания. Вы должны изменить свои настройки пропорционально физической памяти, имеющейся на ваших узлах.

Ключевыми моментами для запоминания являются:

  • Значения mapreduce.map.memory.mb и mapreduce.reduce.memory.mb должны быть не менее yarn.scheduler.minimum-allocation-mb
  • Значения mapreduce.map.java.opts и mapreduce.reduce.java.opts должны быть примерно в 0,8 раза больше значений соответствующих конфигураций mapreduce.map.memory.mb и mapreduce.reduce.memory.mb. (В моем случае это 983 МБ ~ (0,8 * 1228 МБ))
  • Аналогично, значение yarn.app.mapreduce.am.command-opts должно быть "в 0,8 раза больше значения" yarn.app.mapreduce.am.resource.mb

Ниже приведены настройки, которые я использую, и они отлично работают для меня:

yarn-site.xml:

<property> 
    <name>yarn.scheduler.minimum-allocation-mb</name> 
    <value>1228</value>
</property>
<property> 
    <name>yarn.scheduler.maximum-allocation-mb</name> 
    <value>9830</value>
</property>
<property> 
    <name>yarn.nodemanager.resource.memory-mb</name> 
    <value>9830</value>
</property>

mapred-site.xml

<property>  
    <name>yarn.app.mapreduce.am.resource.mb</name>  
    <value>1228</value>
</property>
<property> 
    <name>yarn.app.mapreduce.am.command-opts</name> 
    <value>-Xmx983m</value>
</property>
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>1228</value>
</property>
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>1228</value>
</property>
<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx983m</value>
</property>
<property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx983m</value>
</property>

Вы также можете обратиться к ответу здесь: понимание и настройка контейнера для пряжи

Вы можете добавить настройки vCore, если вы хотите, чтобы ваше распределение контейнера учитывало также CPU. Но для этого вам нужно использовать CapacityScheduler с DominantResourceCalculator. См. Обсуждение об этом здесь: Как контейнеры создаются на основе vcores и памяти в MapReduce2?

Ответ 3

Это решило мой случай для этой ошибки:

<property>
  <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
  <value>100</value>
</property>

Ответ 4

Проверьте файл хостов на главном и подчиненном узлах. У меня была именно эта проблема. Файл моих хостов выглядел так, например, на master node

127.0.0.0 localhost
 127.0.1.1 master-virtualbox
 192.168.15.101 master 

Я изменил его, как показано ниже

192.168.15.101 master master-virtualbox localhost

Так оно и работало.

Ответ 5

У вас есть 512 МБ ОЗУ на каждом экземпляре, и все ваши конфигурации памяти в файле yarn-site.xml и mapred-site.xml составляют от 500 МБ до 3 ГБ. Вы не сможете запускать что-либо в кластере. Измените все до ~ 256 МБ.

Также ваш mapred-site.xml использует фреймворк для пряжи, и у вас есть адрес отслеживания работы, который неверен. Вам необходимо иметь параметры, связанные с менеджером ресурсов, в файле yarn-site.xml в многоузловом кластере (включая веб-адрес ресурса-менеджера). Из-за этого кластер не знает, где находится ваш кластер.

Вам нужно пересмотреть оба ваших xml файла.

Ответ 6

В любом случае, это работает для меня. Большое спасибо! @KaP

что мой yarn-site.xml

<property>
            <name>yarn.resourcemanager.hostname</name>
            <value>MacdeMacBook-Pro.local</value>
    </property>
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>${yarn.resourcemanager.hostname}:8088</value>
    </property>
    <property>
       <name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
   <name>yarn.scheduler.minimum-allocation-mb</name>
   <value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>

что мой mapred-site.xml

<configuration>
<property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>

Ответ 7

Первое, что нужно проверить журналы журнала ресурсов пряжи. Я долго искал Интернет об этой проблеме, но никто не сказал мне, как узнать, что на самом деле происходит. Это так просто и просто проверить журналы управления ресурсами пряжи. Я смущен, почему люди игнорируют журналы.

Для меня была ошибка в log

Caused by: org.apache.hadoop.net.ConnectTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=172.16.0.167/172.16.0.167:55622]

Это потому, что я переключил сеть Wi-Fi на свое рабочее место, так что изменился IP-адрес компьютера.

Ответ 8

Эти строки

<property>
  <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
  <value>100</value>
</property>

в yarn-site.xml решил мою проблему, так как node будет отмечен как нездоровый при использовании дискa >= 95%. Решение в основном подходит для псевдораспределенного режима.