Статьи

MapReduce: мягкое введение

MapReduce — это метод параллельного программирования, ставший популярным в Google. Он используется для обработки очень больших объемов данных. Такая обработка может быть завершена за разумное время только путем распределения работы на несколько машин параллельно. Каждая машина обрабатывает небольшое подмножество данных.

MapReduce — это модель программирования, которая позволяет разработчикам сосредоточиться на написании кода, который обрабатывает их данные, не беспокоясь о деталях параллельного выполнения.

MapReduce требует моделирования данных, которые будут обрабатываться как пары ключ-значение. Разработчик кодирует функцию карты и функцию сокращения.

Среда выполнения MapReduce вызывает функцию map для каждой пары ключ-значение. Функция map принимает в качестве входных данных пару ключ-значение и выдает на выходе другой ключ-пара значений.

Среда выполнения MapReduce сортирует и группирует выходные данные функций карты по ключу. Затем он вызывает функцию Reduce, передавая ей ключ и список значений, связанных с ключом. Функция уменьшения вызывается для каждой клавиши. Выход из функции Reduction представляет собой пару ключ-значение. Значение обычно представляет собой агрегат или что-то, вычисляемое путем обработки списка значений, которые были переданы для ключа ввода. Функция Reduce вызывается для каждого промежуточного ключа, созданного функцией map. Выход из функции уменьшения — это требуемый результат.

В качестве примера, скажем, у вас есть большое количество файлов журналов, которые содержат журналы аудита для какого-либо события, такого как доступ к учетной записи. Вам необходимо выяснить, сколько раз к каждой учетной записи обращались за последние 10 лет.
Предположим, что каждая строка в файле журнала является записью аудита. Мы обрабатываем файлы журнала построчно. Функции map и lower выглядят так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
map(key , value) {
 // key = byte offset in log file
 // value = a line in the log file
 if ( value is an account access audit log) {
  account number = parse account from value
  output key = account number, value = 1
 }
}
 
reduce(key, list of values) {
 // key = account number
 // list of values {1,1,1,1.....}
 for each value
  count = count + value
 output key , count
}

Функция map вызывается для каждой строки в каждом файле журнала. Линии, которые не имеют отношения, игнорируются. Номер учетной записи выделяется из соответствующих строк и выводится со значением 1. Среда выполнения MapReduce сортирует и группирует выходные данные по номеру учетной записи. Функция снижения вызывается для каждой учетной записи. Функция уменьшения объединяет значения для каждой учетной записи, что является требуемым результатом.

Задания MapReduce обычно выполняются на кластере машин. Каждая машина выполняет задачу, которая является либо задачей карты, либо задачей сокращения. Каждая задача обрабатывает подмножество данных. В приведенном выше примере, скажем, мы начинаем с набора больших входных файлов. Среда выполнения MapReduce разбивает входные данные на разделы, называемые разбиениями или осколками. Каждый раскол или осколок обрабатывается задачей карты на машине. Выходные данные каждой задачи карты сортируются и разбиваются по ключам. Выходные данные всех карт объединяются для создания разделов, которые вводятся в задачи сокращения.

Может быть несколько машин, каждая из которых выполняет задачу сокращения. Каждая задача сокращения получает раздел для обработки. Раздел может иметь несколько ключей. Но все данные для каждого ключа находятся в 1 разделе. Другими словами, каждый ключ может быть обработан только одной задачей сокращения.

Количество машин, количество задач карты, количество задач сокращения и некоторые другие параметры настраиваются.

MapReduce полезен для задач, которые требуют некоторой обработки больших наборов данных. Алгоритм можно разбить на карту и сократить функции. Среда выполнения MapReduce обеспечивает распределение обработки по нескольким машинам и объединение результатов.

Apache Hadoop — это Java-реализация mapreduce с открытым исходным кодом. Оставайтесь с нами для будущего блога / учебника по mapreduce, используя hadoop.

Ссылка: Что такое MapReduce? от нашего партнера JCG в Отчете Хангаонкар .

Статьи по Теме :