Вопрос по – Как запланировать задачи Hadoop Map в многоядерном кластере из 8 узлов?

5

У меня есть "только карта" (без уменьшения фазы) программа. Размер входного файла достаточно велик, чтобы создать 7 задач карты, и я проверил это, просмотрев полученный результат (от 000 до 10000). Теперь мой кластер имеет 8 узлов, каждый с 8 ядрами и 8 ГБ памяти, а также общую файловую систему, размещенную на головном узле.

Мой вопрос заключается в том, могу ли я выбрать между выполнением всех 7 задач карты в 1 узле или выполнением 7 задач карты в 7 различных подчиненных узлах (1 задача на узел). Если я могу это сделать, то какие изменения в моем коде и файле конфигурации необходимы.

Я попытался установить параметр & quot; mapred.tasktracker.map.tasks.maximum & quot; только 1 и 7 в моем коде, но я не нашел заметной разницы во времени. В моем конфигурационном файле это установлено как 1.

Ваш Ответ

3   ответа
1

если это возможно. Все преимущество MapReduce заключается в возможности распараллеливания ваших вычислений, чтобы каждая задача выполнялась максимально эффективно. Если вы выполнили 7 задач сопоставления на одном узле, каждая задача будет конкурировать за одни и те же ресурсы (ОЗУ, ЦП, IO) на этом узле.

Стандартная настройка дляmapred.tasktracker.map.tasks.maximum по одному на ядро, так что вы можете изменить настройку на 8.

Кроме того, если у вас есть задание только на карте, вам понадобится веская причина для установки числа картографов на определенное число. Установка количества задач на карте - это просто «подсказка». на JobTracker о том, сколько карт для запуска, но это в конечном итоге решает JobTracker на основе того, как DFS хранит ваши входные данные.Эта вики имеет больше деталей.

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

1

my cluster has 8 nodes each with 8 cores and 8 GB of memory and shared filesystem hosted at head node.

Когда вы говорите, что общая файловая система размещена в головном узле, вы имеете в виду, что данные хранятся в HDFS или в некоторой файловой системе, подобной NFS, смонтированной на каждом узле? Я предполагаю, что вы имеете в виду HDFS, но если вы используете NFS или что-то подобное, вы должны ожидать более высокую пропускную способность с HDFS (вы хотите переместить код обработки в данные, а не перемещать данные на машину обработки). )

Насколько велик ваш входной файл и каков его размер разделения, формат файла (текст, последовательность и т. Д.), Коэффициент репликации и степень сжатия?

В зависимости от ответов на поставленные выше вопросы, при настройке 8x8 вы сможете повысить пропускную способность, если уменьшите размер разбиения карты и увеличите коэффициент репликации.

4

"mapred.tasktracker.map.tasks.maximum" имеет дело с количеством задач карты, которые должны быть запущены на каждом узле, а не с количеством узлов, которые будут использоваться для каждой задачи карты. В архитектуре Hadoop для каждого узла (подчиненных) имеется 1 средство отслеживания задач, а на главном узле (ведущее устройство) - 1 средство отслеживания заданий. Так что если вы установите свойствоmapred.tasktracker.map.tasks.maximum, это только изменит количество задач карты, которые будут выполнены на узел."mapred.tasktracker.map.tasks.maximum" из1/2*cores/node в2*cores/node

Количество задач карты, которые вы хотите в целом, должно быть установлено с помощьюsetNumMapTasks(int)

Похожие вопросы