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

Повторное использование JVM в Hadoop mapreduce jobs

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

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

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

Большое спасибо!

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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