2016-11-30 4 views
0
  1. Скажем, блок 64 МБ находится на узле A и реплицируется среди 2 других узлов (B, C), а размер разделенного входа для программы уменьшения карты - 64 МБ, будет ли это разделение просто иметь место для узла A? Или у него будут места для всех трех узлов A, b, C?
  2. Поскольку данные являются локальными для всех трех узлов, как среда решает (выбирает) задачу карты для запуска на определенном узле?
  3. Как это обрабатывается, если размер Разделение ввода больше или меньше размера блока?
+1

Возможный дубликат [Размер разделения входов Hadoop и размер блока] (http://stackoverflow.com/questions/17727468/hadoop-input-split-size-vs-block-size) –

ответ

0

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

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

Если все A, B, C недоступны, Hadoop узнает, какой узел из A, B или C ближе всего к клиенту, а затем выберите свободный узел на той же стойке, что и A (поскольку внутри-стойка переводы быстрее). Если вся стойка занята, тогда у нее не будет выбора, кроме как выбрать другую стойку и узел для обработки раскола. Разделение будет временно скопировано на узел и после обработки оно будет удалено из временного местоположения.

Если, однако, разделение входа больше размера блока, то применяется тот же самый принцип. Единственное отличие состоит в том, что инфраструктура Hadoop даст «разделить + несколько строк из блока 2» на узел для обработки.

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