2013-07-31 7 views
0

мне интересно, где память используется в следующей работе:Hadoop Streaming Использование памяти

  • Hadoop Mapper/Reducer Heap Размер: -Xmx2G
  • Streaming API:

    • Mapper: /bin/cat
    • Редуктор: wc
  • Файл ввода - 350MByte файл, содержащий одиночный линия, полная a.

Это упрощенная версия реальной проблемы, с которой мы столкнулись.

Чтение файла из HDFS и построение Text -объекта не должен составлять более 700MB Heap - при условии, что Text делает также использовать 16-бит на символ - Я не уверен, что, но я мог себе представить, что Text использует только 8 бит.

Таким образом, это (наихудший) 700MB Line. Строка должна соответствовать по меньшей мере 2x в куче, но я всегда получаю ошибки из памяти.

Возможно, это ошибка в Hadoop (например, нечетные копии), или я просто не понимаю некоторые требуемые шаги интенсивной памяти?

Будем очень благодарны за любые дальнейшие намеки.

ответ

0

Память, предоставляемая каждому дочернему JVM, выполняющему задачу, может быть изменена путем установки свойства mapred.child.java.opts. Значение по умолчанию: -Xmx200m, которое дает каждой задаче 200 МБ памяти.

Когда вы говорите -

Входной файл представляет собой 350MByte файл с указанной единой строчки какойто годов.

Я предполагаю, что у вас есть одна строка всех элементов с одним ограничителем конечной линии.

Если это принято в качестве значения в функции карты (ключа, значения), я думаю, что у вас могут быть проблемы с памятью, так как ваша задача может использовать только 200 МБ, и у вас есть запись в памяти, которая имеет 350MB.

+0

Спасибо. Но моя проблема в том, что 'mapred.child.java.opts' _is_' -Xmx2048M' - поэтому задача может использовать память до 2 ГБ. –

+0

@mt_: Сколько у вас общая система? И, сколько выделяется tasktracker и datanode для этой машины? –

+0

Каждый компьютер имеет память 16 ГБ и сконфигурирован для 2 задач карты и 1 задачи уменьшения -> не более 6 ГБ следует использовать в любое время. –

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