Подтвердить что ты не робот

Какова связь между "mapreduce.map.memory.mb" и "mapred.map.child.java.opts" в Apache Hadoop YARN?

Я хотел бы знать соотношение между параметрами mapreduce.map.memory.mb и mapred.map.child.java.opts.

Является mapreduce.map.memory.mb > mapred.map.child.java.opts?

Спасибо, Kewal.

4b9b3361

Ответ 1

mapreduce.map.memory.mb - это верхний предел памяти, который Hadoop позволяет назначить сопоставлению в мегабайтах. Значение по умолчанию - 512. Если этот предел превышен, Hadoop убьет картографа с такой ошибкой:

Контейнер [PID = container_1406552545451_0009_01_000002, containerID = container_234132_0001_01_000001] выходит за пределы физической памяти. Текущее использование: 569,1 МБ 512 МБ физической памяти; Используется 970,1 МБ виртуальной памяти 1,0 ГБ. Убивающий контейнер.

Hadoop mapper - это Java-процесс, и каждый Java-процесс имеет свои максимальные настройки распределения памяти кучи, настроенные с помощью mapred.map.child.java.opts (или mapreduce.map.java.opts в Hadoop 2+). Если процесс отображения происходит из памяти кучи, картограф выдает исключение из памяти из памяти:

Ошибка: java.lang.RuntimeException: java.lang.OutOfMemoryError

Таким образом, настройки Hadoop и Java связаны. Настройка Hadoop является скорее элементом управления ресурсами/контролем, а Java - скорее конфигурацией ресурсов.

Настройки кучи Java должны быть меньше предела памяти контейнера Hadoop, поскольку нам нужна резервная память для Java-кода. Как правило, рекомендуется резервировать 20% памяти для кода. Поэтому, если настройки правильные, Java-решения Hadoop никогда не должны быть убиты Hadoop, поэтому вы никогда не увидите ошибку "Killing container", как указано выше.

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

Ответ 2

Следующие свойства позволяют указать параметры, которые должны быть переданы JVM, выполняющим ваши задачи. Они могут использоваться с -Xmx для управления доступной кучей.

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.child.java.opts            
mapred.map.child.java.opts         mapreduce.map.java.opts
mapred.reduce.child.java.opts      mapreduce.reduce.java.opts

Обратите внимание, что для первого из них нет прямого эквивалента Hadoop 2; совет в исходном коде должен использовать два других. mapred.child.java.opts по-прежнему поддерживается (но переопределяется двумя другими более конкретными настройками, если они есть).

В дополнение к этим, вы можете ограничить общую память (возможно, виртуальную), доступную для ваших задач, включая определения кучи, стека и класса:

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.job.map.memory.mb           mapreduce.map.memory.mb
mapred.job.reduce.memory.mb        mapreduce.reduce.memory.mb

Я предлагаю установить -Xmx на 75% от значений memory.mb.

В кластере YARN задания не должны использовать больше памяти, чем конфигурацию на стороне сервера yarn.scheduler.maximum-allocation-mb или они будут убиты.

Чтобы проверить значения по умолчанию и их приоритет, см. JobConf и MRJobConfig в исходном коде Hadoop.

Устранение неполадок

Помните, что ваш mapred-site.xml может предоставлять значения по умолчанию для этих параметров. Это может ввести в заблуждение. если ваше задание mapred.child.java.opts программно, это не повлияет, если mapred-site.xml устанавливает mapreduce.map.java.opts или mapreduce.reduce.java.opts. Вам нужно будет установить эти свойства в своей задаче вместо этого, чтобы переопределить mapred-site.xml. Проверьте страницу настройки своей работы (найдите "xmx" ), чтобы узнать, какие значения были применены и откуда они пришли.

Память ApplicationMaster

В кластере YARN вы можете использовать следующие два свойства для управления объемом памяти, доступной вашему ApplicationMaster (для хранения деталей разбиений на входные данные, состояния задач и т.д.):

Hadoop 0.x, 1.x                    Hadoop 2.x
-------------------------------    --------------------------
                                   yarn.app.mapreduce.am.command-opts
                                   yarn.app.mapreduce.am.resource.mb

Опять же, вы можете установить -Xmx (в первом) на 75% от значения resource.mb.

Другие конфигурации

Существует множество других конфигураций, относящихся к ограничениям памяти, некоторые из которых устарели - см. класс JobConf. Один полезный:

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.job.reduce.total.mem.bytes  mapreduce.reduce.memory.totalbytes

Установите это значение в низкое значение (10), чтобы заставить случайное перемещение на диске в случае, если вы нажмете OutOfMemoryError на MapOutputCopier.shuffleInMemory.