Контейнер AM работает за пределами виртуальной памяти

Я играл с приложением распределенной оболочки (hadoop-2.0.0-cdh4.1.2). Это ошибка, которую я получаю в данный момент.

13/01/01 17:09:09 INFO distributedshell.Client: Got application report from ASM for, appId=5, clientToken=null, appDiagnostics=Application application_1357039792045_0005 failed 1 times due to AM Container for appattempt_1357039792045_0005_000001 exited with  exitCode: 143 due to: Container [pid=24845,containerID=container_1357039792045_0005_01_000001] is running beyond virtual memory limits. Current usage: 77.8mb of 512.0mb physical memory used; 1.1gb of 1.0gb virtual memory used. Killing container.
Dump of the process-tree for container_1357039792045_0005_01_000001 :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 24849 24845 24845 24845 (java) 165 12 1048494080 19590 /usr/java/bin/java -Xmx512m org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster --container_memory 128 --num_containers 1 --priority 0 --shell_command ping --shell_args localhost --debug
|- 24845 23394 24845 24845 (bash) 0 0 108654592 315 /bin/bash -c /usr/java/bin/java -Xmx512m org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster --container_memory 128 --num_containers 1 --priority 0 --shell_command ping --shell_args localhost --debug 1>/tmp/logs/application_1357039792045_0005/container_1357039792045_0005_01_000001/AppMaster.stdout 2>/tmp/logs/application_1357039792045_0005/container_1357039792045_0005_01_000001/AppMaster.stderr 

Интересно то, что с настройкой, похоже, не возникло проблем, поскольку простая команда ls или uname завершилась успешно, и вывод был доступен в stdout container2.

Что касается настройки, yarn.nodenamager.vmem-pmem-ratio равно 3, а общая доступная физическая память составляет 2 ГБ, что, я думаю, более чем достаточно, например, для запуска.

Для рассматриваемой команды «ping localhost» сгенерировал два ответа, как видно из containerlogs/container_1357039792045_0005_01_000002/721917/stdout/?start=-4096.

Итак, в чем может быть проблема?


person Jimson Kannanthara James    schedule 01.01.2013    source источник


Ответы (6)


Из сообщения об ошибке видно, что вы используете больше виртуальной памяти, чем ваш текущий лимит в 1,0 ГБ. Это можно решить двумя способами:

Отключить проверку предела виртуальной памяти

YARN просто проигнорирует ограничение; для этого добавьте это в свой yarn-site.xml:

<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
  <description>Whether virtual memory limits will be enforced for containers.</description>
</property>

Значение по умолчанию для этого параметра — true.

Увеличить соотношение виртуальной памяти к физической памяти

В вашем yarn-site.xml измените это значение на более высокое, чем установлено в настоящее время.

<property>
  <name>yarn.nodemanager.vmem-pmem-ratio</name>
  <value>5</value>
  <description>Ratio between virtual memory to physical memory when setting memory limits for containers. Container allocations are expressed in terms of physical memory, and virtual memory usage is allowed to exceed this allocation by this ratio.</description>
</property>

По умолчанию 2.1

Вы также можете увеличить объем физической памяти, выделяемой контейнеру.

Убедитесь, что вы не забыли перезапустить пряжу после изменения конфигурации.

person seg    schedule 28.04.2014
comment
это решение сработало именно так, как описано в tmlye. Благодаря тонну! Сэкономил много моего времени. Примечание. Необходимо перезапустить пряжу stop-yarn.sh/start-yarn.sh. - person Mata; 20.08.2015

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

-Dmapreduce.map.memory.mb=4096

distcp помог мне.

person David Ongaro    schedule 28.01.2015
comment
Спасибо, вы спасли мне жизнь :) Я думал, что придется изменить конфигурацию и перезапустить весь кластер, но увеличение памяти сработало и в моем случае. Также работает distcp. - person Andrew Logvinov; 21.01.2016
comment
Рад, что это помогло! Я понимаю, что исходный вопрос не о distcp, но я думаю, что это в основном та же проблема, которая должна иметь такое же решение. - person David Ongaro; 21.01.2016
comment
Мне тоже помогло. Спасибо! - person Steve S; 16.06.2017

Если вы используете платформу Tez, необходимо установить следующие параметры в Tez-site.xml.

tez.am.resource.memory.mb
tez.task.resource.memory.mb
tez.am.java.opts

И в Yarn-site.xml

yarn.nodemanager.resource.memory-mb
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.nodemanager.vmem-check-enabled
yarn.nodemanager.vmem-pmem-ratio

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

person Avinash    schedule 28.07.2016

Вы можете изменить это значение на более высокое, чем 1 ГБ по умолчанию, в файле yarn-site.xml.

пряжа.приложение.mapreduce.am.resource.mb

person Gavin Huang    schedule 20.03.2017

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

Проблема возникает, когда Tez пытается рассчитать, сколько картографов ему нужно создать, и при выполнении этого расчета он имеет тенденцию идти OOM из-за того, что по умолчанию (1 ГБ) слишком мало.

Способ исправить это — не устанавливать tez.am.resource.memory.mb на 2 ГБ или 4 ГБ. Кроме того, еще одна очень важная вещь заключается в том, что этот параметр нельзя установить из запроса куста, так как к тому времени уже слишком поздно. AM — это первый контейнер, созданный пряжей, поэтому установка этого параметра в запросе hive бесполезна.

Этот параметр необходимо установить либо в *-site.xml, либо при создании оболочки улья, как показано ниже:

hive --hiveconf tez.am.resource.memory.mb=2048 my-large-query.hql

В приведенном выше примере я сигнализирую пряже, чтобы порождать AM размером 2 ГБ вместо того, что установлено по умолчанию.

Ссылка: http://moi.vonos.net/bigdata/hive-cli-memory/

person Pratik Khadloya    schedule 18.07.2018

Ок, узнал. Увеличьте параметр основной памяти до более чем 750 МБ, и вам удастся запустить приложение YARN.

person Jimson Kannanthara James    schedule 28.02.2013
comment
Было бы полезно указать, какой параметр и любую ссылку, где вы это нашли. - person ykesh; 14.11.2013