www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Обзор MapReduce

Дата публикации Apr 3, 2017

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

Когда я впервые начал читать о MapReduce, почти каждый учебник знакомил с обязательным напоминанием Java или C ++. Тем не менее, в мире технологий также существует устаревшее (и все более и более скудное) мышление, что для того, чтобы стать программистом, требуется степень CS. Мне было нетипично удивительно, сколько учебников было у этого предшественника, только чтобы они в любом случае проходили полностью воспроизводимые входы и выходы.

Когда дело доходит донезаново изобретая колесо, абстракция это все. Чем меньше нам приходится запоминать двоичное исполнение каждого алгоритма, тем ближе мы подходим к его реализации. Точка разработки заключается вэволюционируюти если мы не будем использовать эту технологию, мы могли бы также вернуться назад к бурным дням хулиганства хищников на ранчо динозавров, объединенном в профсоюзы, просто чтобы заработать несколько честных луковиц тюльпанов.

Идея «прыгать в» звучит табу, но не поймите неправильно. Это не значит, что целостное понимание должно игнорироваться. Знание функциональности ваших методов и связанных с ними зависимостейключевойчтобы необратимо извергнуть что-то. Но чтобы попасть туда, не нужно возвращаться в школу или изучать новый язык.

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

История

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

Распараллеливаниебыл разработан как средство повышения производительности и эффективности. Он распыляет процесс и выполняет их одновременно. Эти фрагментированные инструкции выполняются одновременно на разных процессорах, либо с одного компьютера, либовclouuddd,

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

Кластерная файловая система

файловая система с общим диском. Наиболее распространенный тип CFS, используетсеть хранения(SAN), чтобы позволить нескольким компьютерам получить прямой доступ к диску на уровне блоков. Это дополнительно извлекается вашей системой управления базами данных (СУБД). С другой стороны,Распределенные файловые системыне делайте этого и вместо этого используйте сеть для отправки данных.

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

Кроме того, CFS используют ограждение, которое изолирует отдельные узлы в кластере в случае предотвращения каскадного сбоя (который будет обсуждаться более подробно позже).

Как только это установлено, вы можете перейти к

Учитывая вашу программу

Шаг 1 в создании параллельной программы состоит в том, чтобы идентифицировать набор задач и / или разделов данных, которые могут быть запущены одновременно.

Иногда процесс просто не может быть запущен одновременно, как в функции Фибоначчи:

Fk = Fk-2 + Fk-1

Это нельзя распараллелить, потому что каждое вычисленное значение зависит от предыдущего.

Чаще вы будете работать с большим количеством согласованных данных, которые должны быть обработаны, но также могут быть разбиты на разделы. Рассмотрим массив строк:

[«Сварливый», «голем», «мелок»]

которые могут быть разбиты на подмассивы одинакового размера:

[Ru сварливый ’] [[голем’] [ray мелок ’]

Если у каждого подмассива нет вычислительных зависимостей, нет требований к взаимодействию и он может следовать одному и тому же итеративному процессу, то он является идеальным кандидатом для параллельных вычислений! Существует общая методика реализации, которая называетсямастер / рабочий:

Хозяин:

- массив inits и разбивает его по доступнымрабочие

- отправляет каждомуработниких подмассив

- получает ответ от каждогоработник

Работник:

- получает подмассив измастер

- выполняет обработку на подмассиве

- возвращает результаты вмастер

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

Балансировки нагрузкиотносится к методам, которые распределяют задачи между процессорами в параллельной системе, чтобы избежать того, что некоторые работники будут неоднократно ставиться в очередь, в то время как другие простаивают. Чтобы вызвать некоторые образы, подумайте об этом как об идеальном воплощении коммунизма.

В то время какстатическийбалансировщики позволяют снизить накладные расходы, они не учитывают текущую нагрузку на сеть

В обратномдинамическийбалансировщики предлагают более гибкое, но более дорогое вычислительное распределение при одновременном внимании к сети.

Пример мастера / рабочего:

Давайте использовать теорему Пифагора в качестве примера для реализации

Это говорит о том, что квадрат гипотенузы (сторона, противоположная прямому углу) равна сумме квадратов двух других сторон,

a² + b² = c²

Теперь, хотя сам по себе этот алгоритм довольно прост, его можно разбить еще дальше:

a_sq = a ^ 2

b_sq = b ^ 2

sum_ab = a_sq + b_sq

c = sqrt (sum_ab)

И это можно переписать на Python:

классно классно. так что на данный момент вы, вероятно, задаетесь вопросом

Что такое MapReduce?

Изучив несколько примеров параллельного программирования, мы можем немного лучше понять, что на самом деле делает MapReduce.

MapReduce является производным откартаа такжеуменьшитькомбинаторы из функционального языка, такого как Lisp.

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

уменьшитьобъединяет все элементы последовательности, используя бинарную операцию. Например, он может использовать «+», чтобы сложить все элементы в последовательности.

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

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

КАРТА:Записывается пользователем библиотеки MapReduce, принимает и вводит пару и создает набор промежуточных пар ключ / значение. Библиотека MapReduce группирует все промежуточные значения, связанные с одним и тем же промежуточным ключомяи передает их функции сокращения.

УМЕНЬШИТЬ:Также написано пользователем, принимает и промежуточный ключ I и набор значений для этого ключа. Эти значения объединяются, чтобы сформировать возможно меньший набор значений.

Например, рассмотрим проблему подсчета количества вхождений каждого слова в большой коллекции документов:

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

Обзор выполнения MapReduce

Вызовы Map распределяются по нескольким машинам путем автоматического разделения входных данных на наборMрасщепляется илиосколки,которые будут обрабатываться на машинах.

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

На следующем рисунке показана общая последовательность операций операций MapReduce:

  1. Библиотека MapReduce в пользовательской программе сначала разбивает входные файлы на М кусочков, как правило, 16–64 МБ / шт. Затем он запускает много копий программы на кластере машин.
  2. Одна из копий программы особенная: мастер. Остальные - работники, которым назначена работа мастером. Есть M задач карты и R уменьшают задачи для назначения. Мастер выбирает свободных рабочих и назначает каждому задачу M или R.
  3. Рабочий, которому назначено задание карты, считывает содержимое соответствующего входного сегмента. Он анализирует пары ключ / значение из входных данных и передает каждую пару в пользовательскую функцию Map. Полученные промежуточные пары K / V буферизируются в памяти.
  4. Периодически буферизованные пары записываются на локальный диск, разделяясь на R областей с помощью функции разделения. Местоположения этих буферизованных пар на локальном диске передаются обратно ведущему, который отвечает за пересылку этих расположений работникам сокращения.
  5. Когда рабочий-редуктор получает местоположение от мастера, он использует удаленные вызовы для чтения буферизованных данных с дисков. Когда рабочий-редуктор прочитал все промежуточные данные, он сортирует их по промежуточным ключам, поэтому все одинаковые вхождения сгруппированы вместе. (примечание: если объем промежуточных данных слишком велик для размещения в памяти, используется внешняя сортировка)
  6. Работник Reduce перебирает отсортированные промежуточные данные и для каждого встреченного уникального промежуточного ключа передает ключ и соответствующий набор промежуточных значений в пользовательскую функцию Reduce. Выходные данные функции Reduce добавляются в окончательный выходной файл для этого раздела Reduce.
  7. Когда все задачи карты и задачи сокращения были выполнены, мастер запускает пользовательскую программу. В этот момент вызов MapReduce в пользовательской программе возвращается к пользовательскому коду.

Примечания к исполнению:

  • После успешного завершения выходные данные выполнения MapReduce доступны в выходных файлах R
  • Чтобы обнаружить сбой, мастер периодически пингует каждого работника. Если после определенного момента ответ работника не получен, работник помечается как «не выполненный», и все предыдущие задачи этого работника сбрасываются, чтобы получить право на перепланирование для других работников.
  • Завершенные задачи сопоставления повторно выполняются при возникновении сбоя, поскольку их выходные данные хранятся на локальном диске (дисках) неисправного компьютера и поэтому недоступны. Завершенные задачи сокращения не нужно повторять, поскольку их выходные данные хранятся в глобальной файловой системе.

Примеры MapReduce

В заключение я приведу несколько примеров программ, которые можно легко выразить в виде вычислений MapReduce и которые помогут нарисовать картину рабочего процесса M / R:

Распределенный Grep -Функция карты выдает строку, если шаблон соответствует. Функция сокращения - это функция идентификации, которая просто копирует предоставленные промежуточные данные в вывод.

Количество частот доступа к URL -Функция map обрабатывает журналы запросов и выводов веб-страниц, Функция Reduce суммирует все значения для одного и того же URL и выдаетпара.

Обратный график веб-ссылок -Вывод функции картыпары для каждой ссылки на целевой URL, найденный на странице с именем «источник». Функция Reduce объединяет список всех исходных URL-адресов, связанных с заданным целевым URL-адресом, и создает пару:,

Термин-вектор на хост -Термин вектор обобщает наиболее важные слова, встречающиеся в документе (ах), в виде спискапар. Функция карты испускаетпара для каждого входного документа (где имя хоста извлекается из URL документа). Функция Reduce передает все векторы терминов для каждого документа для данного хоста. Он добавляет эти векторы терминов вместе, отбрасывая редкие термины, и генерирует окончательныйпара.

Инвертированный индекс -Функция карты анализирует каждый документ и выдает последовательностьпар. Функция Reduce принимает все пары для данного слова, сортирует соответствующие идентификаторы документа и выдаетпара. Множество всех выходных пар образует простой инвертированный индекс. Также легко дополнить это вычисление, чтобы отслеживать словопозициитакже.

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map