2012-05-07 3 views
12

Я знаю, что мы можем установить свойство «mapred.job.reuse.jvm.num.tasks» для повторного использования JVM. Мои вопросы:повторное использование JVM в Hadoop mapreduce jobs

(1) как решить количество заданий, которые должны быть установлены здесь, -1 или некоторые другие положительные целые числа?

(2) Это хорошая идея, чтобы уже использовать JVM и установить это свойство в значение -1 в заданиях mapreduce?

спасибо!

ответ

19

Если у вас очень маленькие задачи, которые определенно работают друг за другом, полезно установить это свойство равным -1 (это означает, что порожденная JVM будет использоваться повторно неограниченное количество раз). Итак, вы просто создаете (количество задач в вашем кластере, доступное для вашей работы) -JVM вместо (количество задач) -JVM.

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

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

Кроме того, если у вас есть задания средней продолжительности, вы можете повторно использовать только 2-3 задачи, имея хороший компромисс.

+0

Если вы включите задачу uber, можете ли отображать и уменьшать долю одного JVM? или это похоже на то, что mappers могут делиться тем же JVM, и редукторы могут использовать одну и ту же JVM? – MikA

1

Повторное использование JVM (возможно только в MR1) должно помочь в производительности, поскольку оно устраняет задержку запуска JVM, но оно только незначительно и имеет ряд недостатков (чтение побочных эффектов. Большинство задач будут работать в течение длительного времени (десятки секунд или даже минут) и время запуска не являются проблемой при просмотре этих задач. Вы хотите начать новую задачу на чистом слайде. Когда вы повторно используете JVM, есть вероятность, что куча не полностью чиста (она фрагментирована из предыдущих прогонов). Фрагментация может привести к большему количеству GC и аннулировать все затраты времени на запуск. Если есть утечка памяти, это может также повлиять на использование памяти и т. д. Поэтому лучше запустите новую JVM для задач (если задачи не являются достаточно маленькими). ​​В MR2 (YARN) для задач всегда запускается новая JVM. Для задач Uber - она ​​запускает задачу только в локальной JVM.

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