Введение в облачные и распределенные информационные системы. Тимур Машнин
Чтение книги онлайн.

Читать онлайн книгу Введение в облачные и распределенные информационные системы - Тимур Машнин страница 6

СКАЧАТЬ style="font-size:15px;">      Как распараллелить эту фазу reduce?

      Фаза reduce не обрабатывает эти записи независимо, другими словами, одна запись и другая запись должны обрабатываться вместе, так как они имеют одинаковые ключи.

      Таким образом, единственный способ распараллелить этот процесс, это разделить задачи reduce по ключам.

      Существуют разные способы разбиения ключей на задачи.

      Один из способов разделения – это использование хэшей.

      Вы берете ключ, и обрабатываете его хеш-функцией.

      Затем делите хэш на количество задач reduce и в остатке от деления получаете к какой reduce задаче данный ключ относится.

      Например, если есть 10 задач reduce, эта операция вернет значения от 0 до 9 для всех ключей.

      У парадигмы MapReduce есть реализация с открытым исходным кодом Apache Hadoop, это набор утилит, библиотек и фреймворк для разработки и выполнения распределённых программ, работающих на кластерах из сотен и тысяч узлов.

      Итак, вот что такое Map в Hadoop.

      У вас есть MapClass, который расширяет базовый класс и реализует интерфейс.

      И главная функция здесь – это map.

      Эта функция принимает значение, которое в этом случае является текстом.

      Значением может быть одна строка текста во входном файле.

      Эта строка разбивается на слова.

      И для каждого слова вы выводите пару ключ-значение.

      Таким образом это промежуточная выходная пара ключ-значение.

      Здесь у нас есть ReduceClass, который имеет функцию reduce, получающую на вход ключ и значения, потому что у вас могут быть много значений, связанных с данным ключом.

      Эта функция reduce вызывается для каждого ключа, который относится к данной задаче reduce.

      Таким образом, reduce будет проходить через все значения и суммировать их и вырабатывать пару «ключ-значение», где ключ совпадает с ключом ввода, а значение – фактически сумма входных значений.

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

      Посмотрим пример приложения, который использует MapReduce.

      Это распределенный grep.

      Предположим, у вас есть большой набор файлов с большими текстами в них.

      И у вас есть шаблон, который может быть регулярным выражением или просто словом, или набором слов, и вы хотите вывести все строки текста, соответствующие этому шаблону.

      Таким образом, Map будет принимать на вход каждую строку текста и проверять ее на соответствие шаблону, а затем выводить эту строку как ключ.

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

      Решая такую простую задачу на одной машине, для больших объемов данных, СКАЧАТЬ