Модель программирования

Завершено

Hadoop представляет MapReduce в качестве аналитического механизма. В его основе лежит распределенная файловая система Hadoop (HDFS)1. HDFS имитирует файловую систему Google (GFS)2 и разделяет входные наборы данных на фрагменты фиксированного размера (блоки), распределяя их по активным узлам кластера. По умолчанию каждый блок HDFS имеет размер 64 МБ и может быть настроен пользователями по-разному. Задания могут обрабатывать блоки HDFS параллельно на распределенных машинах, тем самым используя параллелизм, возможный благодаря секционированным наборам данных. MapReduce разделяет задания на несколько задач, обозначенных как задачи map и reduce. Все задачи map выполняются на так называемом этапе отображения, а задачи reduce — на этапе свертки. На этапе отображения может быть одна или несколько задач map, а на этапе свертки — ноль или несколько задач свертки. Если задание MapReduce не включает задачи reduce, оно называется "reduce-less"3.

A full, simplified view of the phases, stages, tasks, data input, data output, and data flow in the MapReduce analytics engine.

Рис. 1. Полное упрощенное представление этапов, этапов, задач, ввода данных, вывода данных и потока данных в подсистеме аналитики MapReduce

На этом рисунке показана полная, хотя и упрощенная схема подсистемы аналитики MapReduce. Задачи map работают с распределенными блоками HDFS, а задачи reduce — с выходными данными задач map, обозначенными как промежуточные выходные данные, или секции. Каждая задача map обрабатывает один или несколько отдельных блоков HDFS (подробнее об этом чуть ниже), а каждая задача reduce обрабатывает одну или несколько секций. В обычной программе MapReduce задача map, выполняемая во всех входных блоках HDFS, одинакова, и задача reduce, выполняемая для всех секций, также одинакова. Таким образом, в рамках определенного этапа отображения или свертки задания MapReduce могут рассматриваться в категории "одна программа — много данных" (SPMD).

Задачи map и reduce используют разные данные, работая независимо друг от друга и параллельно, только на соответствующих этапах. То есть задачи на одном этапе никогда не обмениваются данными (не отправляют и не получают сообщения), и единственная связь в MapReduce происходит явным образом (с помощью инфраструктуры MapReduce) между разными задачами на разных этапах. В частности, задачи map формируют новые секции на этапе отображения, и сам модуль Hadoop передает секции (по сети) задачам reduce на этапе свертки в процессе, именуемом перетасовыванием. Смысл такой стратегии заключается в том, что Hadoop не масштабировался бы до крупных кластеров (с сотнями или тысячами узлов), если бы задачам было разрешено взаимодействовать произвольно. Вместо этого все коммуникации происходят только между этапами отображения и свертки под полным контролем самого обработчика (а не задач). Поэтому типичная программа, выполняемая в варианте MapReduce, может рассматриваться как особый случай модели передачи сообщений. Задачи не имеют доступа к общей памяти, но полагаются на сообщения, передаваемые платформой между барьерами синхронизации map и reduce.


Ссылки

  1. HDFS Architecture Guide Hadoop
  2. S. Ghemawat, H. Gobioff, and S. T. Leung (Oct. 2003). The Google File System SOSP
  3. S. Chen and S. W. Schlosser (2008). MapReduce Meets Wider Varieties of Applications IRP-TR-08-05, Intel Research