2013-12-10 5 views
1

Учитывая большой файл данных и jarfile, содержащий mapper, классы редуктора, я хочу знать, как должен быть сформирован большой кластер Hadoop (я имею в виду, сколько машин мне понадобится для создания кластера для данное задание выполняется эффективно.) Я запускаю задание по данным файла данных.Извлечь свойства задания hadoop

+1

Что вы подразумеваете под "run эффективно"? – facha

+0

«run эффективно» означало, что я должен получать результат за меньшее время, и я не должен заканчивать использование дополнительных машин, когда это может быть сделано на меньшем количестве машин (у меня есть верхняя граница количества доступных машин). – user2987506

ответ

0

Предполагая, что ваша шкала заданий MapReduce линейно, я предлагаю следующий тест, чтобы получить общее представление о том, что вам нужно. Я предполагаю, что у вас есть время, когда вы говорите «бегите эффективно» ... это может быть 1 минута для кого-то или 1 час для кого-то ... это зависит от вас.

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

[(time job took on your test cluster) x (number of nodes in test cluster)] 
x [(size of full data set)/(size of sample data set)] 
/(new time, i.e., "run efficiently") 

= (number of nodes in final cluster) 

Некоторые вещи, чтобы отметить:

  • Если вы дважды «время работы взяли на тест-кластер», вам нужно в два раза больше узлов.
  • Если вы вдвое увеличиваете «новое время», то есть хотите, чтобы ваша работа выполнялась в два раза быстрее, вам потребуется вдвое больше узлов.
  • Отношение образца показывает, сколько масштабирует результат

Пример:

У меня есть работа, которая занимает 30 минут на двух узлах. Я выполняю эту работу на 4 ГБ 400 ГБ данных (400/4 ГБ). Я бы хотел, чтобы моя работа заняла 12 минут.

(30 minutes x 2 nodes) x (400/4) GB/12 = 500 nodes 

Это несовершенны несколькими способами:

  • С одним или двумя узлами, я не в полной мере принимая во внимание, сколько времени это займет, чтобы передать материал над сеть ... большая часть работы по созданию карты. Таким образом, вы можете предположить, что это займет больше времени, чем эта оценка. Если можно, проверьте свою работу на 4-10 узлов и оттуда оттуда.
  • Hadoop не «масштабируется» хорошо. Существует определенный предел скорости, с которым вы не сможете пересечь MapReduce. Где-то около 2-3 минут на большинстве кластеров я видел. То есть вы не будете запускать задание MapReduce за 3 секунды, имея миллион узлов.
  • Ваша работа может не масштабироваться линейно, и в этом случае это упражнение является ошибочным.
  • Возможно, вы не можете найти репрезентативное оборудование. В этом случае вам придется учитывать, насколько быстрее вы думаете, что ваша новая система будет. не

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

По моему опыту, при тестировании от 200 узлов до 800 узлов эта метрика довольно точна. Я был бы взволнован, если перейду от 1 узла или 2 узла к 800. Но 20 узлов до 800 могут быть в порядке.

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