Hadoop: снижение производительности при увеличении размеров блока? - PullRequest
3 голосов
/ 24 ноября 2011

Кто-нибудь видел снижение производительности при увеличении размера блока в Hadoop?Мы настраиваем кластер, и мы ожидаем, что в день будет приходить большое количество данных (100 ГБ), которые нам нужно хранить, поэтому я подумал, что мы можем увеличить размер блока на хорошую величину.Однако были опасения, что существует момент, когда это может замедлить выполнение заданий MapReduce.Единственный способ увидеть, как это происходит, - это если количество блоков было меньше, чем количество задач, которые можно запустить в кластере.

Есть ли у кого-нибудь дополнительная информация по этому вопросу?

1 Ответ

2 голосов
/ 24 ноября 2011

Вот несколько вещей, которые следует учитывать:

  • Слишком маленькие файлы не рекомендуются - метаданные файловой системы хранятся в памяти namenode - аппаратные ограничения на количество файлов.
  • Размер блока по умолчанию включенHDFS составляет 64 МБ, но 128 МБ является наиболее распространенным случаем на производственных серверах.
  • Блоки HDFS по умолчанию имеют большой размер и имеют большее время передачи блока по сравнению со временем поиска - поэтому время передачи больших файлов, состоящих из множества блоков, работаетво время передачи диска.
  • Задачи MapReduce работают с одним блоком за раз, поэтому, если у вас слишком мало задач (меньше узлов в кластере), ваши задания могут быть медленными.
  • Установка размера блокаБыть рядом с приблизительным размером ваших файлов в HDFS не очень хорошая идея, потому что это увеличивает вероятность ошибочных данных.Предположим, у вас есть 1 файл размером 1 ГБ, а размер блока также составляет 1 ГБ.Предположим также, что коэффициент репликации равен 3 в вашем облаке (по умолчанию или, по крайней мере, наиболее часто).Это означает, что у вас будет весь файл в виде одного блока на 3 компьютерах.Это отличается от того, что только 3 блока файлов реплицированы на 3 компьютерах.
  • Если количество блоков (файлов обработки ввода) меньше числа задач, которые вы можете одновременно выполнять в своей среде - это ХОРОШО- это означает, что вы обрабатываете все входные данные с максимальным параллелизмом и все еще имеете свободные ресурсы.
...