2013-11-19 4 views
0

Я тестирую свой UDF на виртуальной машине Windows с 8 ядрами и 8 ГБ оперативной памяти. Я создал 5 файлов по 2 ГБ и запустил скрипт свиней после изменения «mapred.tasktracker.map.tasks.maximum». следующие во время выполнения и статистика:Оптимизация UDF в Hadoop

mapred.tasktracker.map.tasks.maximum = 2

duration = 20 min 54 sec

mapred.tasktracker.map.tasks.maximum = 4

duration = 13 min 38 sec and about 30 sec for task

35% better

mapred.tasktracker.map. tasks.maximum = 8

duration = 12 min 44 sec and about 1 min for task

only 7% better

Почему такое небольшое улучшение при изменении параметров? есть идеи? Работа была разделена на 145 задач. !

[4 слота] [1]

[8 слоты] [2]

ответ

0

Пар наблюдений:

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

  2. Добавив дополнительные слоты для карт, вы уменьшили количество волн присваивания, которые должен выполнять Job Tracker, и каждая волна имеет накладные расходы на опрос (TT опрос заданий, JT опрос TT и назначение новых задач бесплатные слоты). 2 слота TT против 8 слотов TT означают, что у вас есть 145/2 = ~ 73 волны назначения (если все задачи выполнялись в равное время, что явно не реалистично) против 145/8 = ~ 19 волн - это увеличение на 3 раза в необходимое количество опросов (и все это добавляет).

+0

Сегодня я повторил тест на локальном компьютере Windows (не виртуальном) с локальным диском и получил те же результаты. На локальной машине я не могу улучшить результат? – geldar

+0

Суть в том, что вам нужно больше дисков для обеспечения пропускной способности вашей работы, на какой-то стадии добавление большего количества слотов задач (ядер) будет зависеть, поскольку вы ограничены скоростью чтения диска –

0

mapred.tasktracker.map.tasks.maximum настраивает максимальное количество задач карты, которые будут запускаться одновременно трекере задач. Существует ограниченное количество аппаратных средств, на которые может работать один узел одновременно. Таким образом, при увеличении этого числа будет уменьшаться отдача.

Например, узел tasktracker имеет 8 ядер. Скажем, 4 ядра используются процессами, отличными от tasktracker. Это оставляет 4 ядра для намеченных задач. Таким образом, ваше рабочее время улучшится с mapred.tasktracker.map.tasks.maximum = 1 до 4, но после этого оно останется статическим, потому что остальные задачи будут только ждать. На самом деле, если вы слишком много увеличите, конфликт и переключение контекста могут замедлить работу.recommended value для этого параметра No. of CPU cores - 1

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