MapReduce
MapReduce — это модель программирования и связанная с ней реализация для обработки и создания больших наборов данных с помощью распределенного параллельного алгоритма в кластере . [ 1 ] [ 2 ] [ 3 ]
Программа MapReduce состоит из карты процедуры , которая выполняет фильтрацию и сортировку (например, сортировку студентов по имени в очереди, по одной очереди для каждого имени), и метода сокращения , который выполняет суммарную операцию (например, подсчет количества учащихся). студентов в каждой очереди, что дает частоту имен). «Система MapReduce» (также называемая «инфраструктурой» или «фреймворком») организует обработку, объединяя распределенные серверы, параллельно выполняя различные задачи, управляя всеми коммуникациями и передачей данных между различными частями системы и обеспечивая резервирование. и отказоустойчивость .
Модель является специализацией стратегии разделения-применения-объединения для анализа данных. [ 4 ] Он вдохновлен функциями отображения и сокращения , обычно используемыми в функциональном программировании . [ 5 ] хотя их назначение в рамках MapReduce не такое же, как в их исходных формах. [ 6 ] Ключевым вкладом платформы MapReduce не являются фактические функции карты и сокращения (которые, например, напоминают стандарт интерфейса передачи сообщений 1995 года ). [ 7 ] уменьшать [ 8 ] и разбросать [ 9 ] операций), но масштабируемость и отказоустойчивость, достигаемые для множества приложений за счет распараллеливания. Таким образом, однопоточная реализация MapReduce обычно не быстрее, чем традиционная реализация (не MapReduce); любой выигрыш обычно наблюдается только при многопоточных реализациях на многопроцессорном оборудовании. [ 10 ] Использование этой модели выгодно только тогда, когда в игру вступают оптимизированная операция распределенного перемешивания (которая снижает затраты на сетевую связь) и функции отказоустойчивости инфраструктуры MapReduce. Оптимизация затрат на связь важна для хорошего алгоритма MapReduce. [ 11 ]
MapReduce Библиотеки написаны на многих языках программирования с разными уровнями оптимизации. Популярная реализация с открытым исходным кодом , поддерживающая распределенное перемешивание, является частью Apache Hadoop . Название MapReduce первоначально относилось к собственной технологии Google , но с тех пор было обобщено . К 2014 году Google больше не использовал MapReduce в качестве основной модели обработки больших данных . [ 12 ] и разработка Apache Mahout перешла к более функциональным и менее ориентированным на диск механизмам, которые включали полную карту и возможности сокращения. [ 13 ]
Обзор
[ редактировать ]MapReduce — это платформа для решения распараллеливаемых задач в больших наборах данных с использованием большого количества компьютеров (узлов), называемых кластером ( если все узлы находятся в одной локальной сети и используют одинаковое оборудование) или сеткой (если узлы распределяются между географически и административно распределенными системами и используют более разнородное оборудование). Обработка может происходить с данными, хранящимися либо в файловой системе (неструктурированная), либо в базе данных (структурированной). MapReduce может использовать преимущества локальности данных, обрабатывая их рядом с местом их хранения, чтобы минимизировать накладные расходы на связь.
Платформа (или система) MapReduce обычно состоит из трех операций (или шагов):
- Карта: каждый рабочий узел применяет
map
функцию в локальные данные и записывает выходные данные во временное хранилище. Главный узел гарантирует, что обрабатывается только одна копия избыточных входных данных. - Перетасовка: рабочие узлы перераспределяют данные на основе выходных ключей (создаваемых
map
функция), так что все данные, принадлежащие одному ключу, расположены на одном рабочем узле. - Уменьшение: рабочие узлы теперь обрабатывают каждую группу выходных данных для каждого ключа параллельно.
MapReduce позволяет выполнять распределенную обработку карт и операций сокращения. Карты могут выполняться параллельно при условии, что каждая операция картирования независима от других; на практике это ограничено количеством независимых источников данных и/или количеством процессоров рядом с каждым источником. Аналогичным образом, набор «редукторов» может выполнять фазу сокращения при условии, что все выходные данные операции отображения, использующие один и тот же ключ, одновременно представляются одному и тому же редуктору или что функция сокращения является ассоциативной . Хотя этот процесс часто кажется неэффективным по сравнению с более последовательными алгоритмами (поскольку необходимо запускать несколько экземпляров процесса сокращения), MapReduce можно применять к значительно большим наборам данных, чем может обработать один «обычный» сервер – большая ферма серверов может использовать MapReduce для сортировки петабайта данных всего за несколько часов. [ 14 ] Параллелизм также предлагает некоторую возможность восстановления после частичного отказа серверов или хранилища во время операции: если один маппер или редюсер выйдет из строя, работу можно перенести — при условии, что входные данные все еще доступны.
Другой способ взглянуть на MapReduce — это 5-этапное параллельное и распределенное вычисление:
- Подготовьте ввод Map() — «система MapReduce» назначает процессоры Map, назначает входной ключ K1 , с которым будет работать каждый процессор, и предоставляет этому процессору все входные данные, связанные с этим ключом.
- Запустите предоставленный пользователем код Map() — Map() запускается ровно один раз для каждого ключа K1 , генерируя выходные данные, организованные по ключу K2 .
- «Перетасуйте» выходные данные Map на процессоры сокращения — система MapReduce назначает процессоры сокращения, назначает ключ K2 , с которым должен работать каждый процессор, и предоставляет этому процессору все сгенерированные Map данные, связанные с этим ключом.
- Запустите предоставленный пользователем код Редуцировать() — Редукция() запускается ровно один раз для каждого ключа K2 , созданного на этапе Карты.
- Создание окончательного результата — система MapReduce собирает все выходные данные сокращения и сортирует их по K2 для получения окончательного результата.
Логически эти пять шагов можно рассматривать как выполняемые последовательно — каждый шаг начинается только после завершения предыдущего шага — хотя на практике их можно чередовать, если это не повлияет на конечный результат.
Во многих ситуациях входные данные могли быть уже распределены ( «сегментированы» ) между множеством различных серверов, и в этом случае шаг 1 иногда можно значительно упростить, назначив картографические серверы, которые будут обрабатывать локально присутствующие входные данные. Аналогичным образом, шаг 3 иногда можно ускорить, назначив процессоры сокращения, которые максимально приближены к данным, сгенерированным Map, которые им необходимо обработать.
Логическое представление
[ редактировать ]Map . и уменьшить Функции MapReduce определены в отношении данных, структурированных в парах (ключ, значение) Карта принимает одну пару данных с типом в одном домене данных и возвращает список пар в другом домене:
Map(k1,v1)
→ list(k2,v2)
Функция Map применяется параллельно к каждой паре (под ключом k1
) во входном наборе данных. Это создает список пар (с ключами k2
) для каждого звонка.
После этого фреймворк MapReduce собирает все пары с одним и тем же ключом ( k2
) из всех списков и группирует их вместе, создавая по одной группе для каждого ключа.
Затем функция уменьшения применяется параллельно к каждой группе, что, в свою очередь, создает коллекцию значений в одном домене:
Reduce(k2, list (v2))
→ list((k3, v3))
[ 15 ]
Каждый вызов сокращения обычно создает либо одну пару значений ключа, либо пустой возврат, хотя одному вызову разрешено возвращать более одной пары значений ключа. Возвраты всех вызовов собираются в виде списка желаемых результатов.
Таким образом, платформа MapReduce преобразует список пар (ключ, значение) в другой список пар (ключ, значение). [ 16 ] Это поведение отличается от типичной комбинации карты функционального программирования и сокращения, которая принимает список произвольных значений и возвращает одно единственное значение, объединяющее все значения, возвращаемые картой.
Для реализации MapReduce необходимо , но недостаточно иметь реализации карты и сократить абстракции. Распределенные реализации MapReduce требуют средств соединения процессов, выполняющих этапы Map и сокращения. Это может быть распределенная файловая система . Возможны и другие варианты, такие как прямая потоковая передача от преобразователей к преобразователям или передача результатов процессорами сопоставления преобразователям, которые их запрашивают.
Примеры
[ редактировать ]Канонический пример MapReduce подсчитывает появление каждого слова в наборе документов: [ 17 ]
function map(String name, String document): // name: document name // document: document contents for each word w in document: emit (w, 1) function reduce(String word, Iterator partialCounts): // word: a word // partialCounts: a list of aggregated partial counts sum = 0 for each pc in partialCounts: sum += pc emit (word, sum)
Здесь каждый документ разбивается на слова, и каждое слово подсчитывается функцией карты , используя это слово в качестве ключа результата. Фреймворк объединяет все пары с одним и тем же ключом и передает их одному и тому же вызову сокращения . Таким образом, этой функции нужно просто просуммировать все входные значения, чтобы найти общее количество появлений этого слова.
В качестве другого примера представьте, что для базы данных из 1,1 миллиарда человек нужно вычислить среднее количество социальных контактов, которые имеет человек в зависимости от возраста. В SQL такой запрос может быть выражен как:
SELECT age, AVG(contacts)
FROM social.person
GROUP BY age
ORDER BY age
Используя MapReduce, Значениями ключа K1 могут быть целые числа от 1 до 1100, каждое из которых представляет пакет из 1 миллиона записей. Ключевое значение K2 может представлять собой возраст человека в годах, и это вычисление может быть достигнуто с использованием следующих функций:
function Map is input: integer K1 between 1 and 1100, representing a batch of 1 million social.person records for each social.person record in the K1 batch do let Y be the person's age let N be the number of contacts the person has produce one output record (Y,(N,1)) repeat end function function Reduce is input: age (in years) Y for each input record (Y,(N,C)) do Accumulate in S the sum of N*C Accumulate in Cnew the sum of C repeat let A be S/Cnew produce one output record (Y,(A,Cnew)) end function
Обратите внимание, что в уменьшения , Функция C — количество людей, имеющих в общей сложности N контактов, поэтому в Функция карты естественно написать C=1 , поскольку каждая выходная пара относится к контактам одного человека.
Система MapReduce выстроит в ряд 1100 процессоров Map и предоставит каждому соответствующий 1 миллион входных записей. Шаг Map даст 1,1 миллиарда (Y,(N,1)) записи, причем Значения Y находятся в диапазоне, скажем, от 8 до 103. Затем система MapReduce выстроит в ряд 96 процессоров сокращения, выполняя операцию перетасовки пар ключ/значение, поскольку нам нужно среднее значение по возрасту, и предоставит каждому свои миллионы соответствующие входные записи. Шаг «Сокращение» приведет к значительному сокращению набора выходных записей, состоящего всего из 96 записей. (Y,A) , который будет помещен в окончательный файл результатов, отсортированный по И .
Информация о количестве в записи важна, если обработка сокращается более одного раза. Если бы мы не добавили количество записей, вычисленное среднее значение было бы неправильным, например:
-- map output #1: age, quantity of contacts 10, 9 10, 9 10, 9
-- map output #2: age, quantity of contacts 10, 9 10, 9
-- map output #3: age, quantity of contacts 10, 10
Если мы уменьшим файлы №1 и #2 у нас будет новый файл со средним числом 9 контактов для 10-летнего человека ((9+9+9+9+9)/5):
-- reduce step #1: age, average of contacts 10, 9
Если мы уменьшим его с помощью файла #3 , мы теряем счет того, сколько записей мы уже просмотрели, поэтому в итоге у нас получается в среднем 9,5 контактов для 10-летнего человека ((9+10)/2), что неверно. Правильный ответ: 9,1 66 = 55/6 = (9×3+9×2+10×1)/(3+2+1).
Поток данных
[ редактировать ]Архитектура программной платформы придерживается принципа открытости-закрытости , при котором код эффективно разделяется на неизменяемые « замороженные» точки и расширяемые « горячие точки» . Замороженное место фреймворка MapReduce — это большой распределенный тип. Горячие точки, которые определяет приложение:
- считыватель ввода
- карты функция
- функция распределения
- функция сравнения
- Функция уменьшения
- писатель выходной
Входной считыватель
[ редактировать ]Устройство чтения входных данных делит входные данные на «разделения» соответствующего размера (на практике обычно от 64 МБ до 128 МБ), и платформа назначает одно разделение для каждой функции карты . Устройство чтения ввода считывает данные из стабильного хранилища (обычно распределенной файловой системы ) и генерирует пары ключ/значение.
Типичный пример: чтение каталога, полного текстовых файлов, и возврат каждой строки в виде записи.
Функция карты
[ редактировать ]Функция Map принимает серию пар ключ/значение, обрабатывает каждую и генерирует ноль или более выходных пар ключ/значение. Типы ввода и вывода карты могут отличаться (и часто отличаются) друг от друга.
Если приложение выполняет подсчет слов, функция карты разбивает строку на слова и выводит пару ключ/значение для каждого слова. Каждая выходная пара будет содержать слово в качестве ключа и количество экземпляров этого слова в строке в качестве значения.
Функция разделения
[ редактировать ]Каждый вывод функции Map назначается конкретному редуктору приложения с помощью функции секционирования для целей сегментирования . Функция секционирования получает ключ и количество редукторов и возвращает индекс нужного редуктора .
Типичным по умолчанию является хеширование ключа и использование хэш-значения по модулю количества редукторов . Важно выбрать функцию секционирования, которая обеспечивает примерно равномерное распределение данных по сегментам в целях балансировки нагрузки , иначе операция MapReduce может быть приостановлена в ожидании завершения медленных редукторов. (т.е. редукторы назначили большие доли неравномерно секционированных данных).
Между этапами карты и сокращения данные перемешиваются (параллельно сортируются/обменяются между узлами), чтобы переместить данные из узла карты, который их произвел, в шард, в котором они будут сокращены. Перетасовка иногда может занимать больше времени, чем время вычислений, в зависимости от пропускной способности сети, скорости процессора, создаваемых данных и времени, затрачиваемого на карту, и сокращает вычисления.
Функция сравнения
[ редактировать ]Входные данные для каждого сокращения извлекаются с машины, на которой выполнялась карта приложения , и сортируются с использованием функции сравнения .
Функция сокращения
[ редактировать ]приложения Платформа вызывает функцию сокращения один раз для каждого уникального ключа в отсортированном порядке. Редукция . может перебирать значения, связанные с этим ключом, и выдавать ноль или более выходных данных
В примере с подсчетом слов функция уменьшения принимает входные значения, суммирует их и генерирует одно выходное слово и окончательную сумму.
Выходной писатель
[ редактировать ]Модуль записи вывода записывает выходные данные сокращения в стабильное хранилище.
Теоретическая основа
[ редактировать ]Свойства моноидов являются основой обеспечения корректности операций MapReduce. [ 18 ] [ 19 ]
В пакете Algebird [ 20 ] реализация Map/Reduce в Scala явно требует типа класса monoid . [ 21 ]
Операции MapReduce имеют дело с двумя типами: тип A отображаемых входных данных и тип B сокращаемых выходных данных.
Операция Map принимает отдельные значения типа A и создает для каждого a:A значение b:B ; Для операции сокращения требуется бинарная операция, • определенная для значений типа B ; он состоит в сведении всех доступных значений b:B к одному значению.
С точки зрения основных требований, любая операция MapReduce должна включать возможность произвольной перегруппировки сокращаемых данных. Такое требование сводится к двум свойствам операции •:
- ассоциативность: ( x • y ) • z = x • ( y • z )
- существование нейтрального элемента e такого, что e • x = x • e = x для каждого x:B .
Второе свойство гарантирует, что при распараллеливании на нескольких узлах узлы, у которых нет данных для обработки, не окажут влияния на результат.
Эти два свойства сводятся к наличию моноида ( B , •, e ) для значений типа B с операцией • и нейтральным элементом e .
Нет никаких требований к значениям типа A ; произвольную функцию A → B. можно использовать Map для операции Это означает, что мы имеем катаморфизм A* → ( B , •, e ). Здесь A* обозначает звезду Клини также известную как тип списков над A. ,
Операция Shuffle сама по себе не имеет отношения к сути MapReduce; необходимо распределить вычисления по облаку.
Из вышесказанного следует, что не каждая бинарная операция сокращения будет работать в MapReduce. Вот обратные примеры:
- построение дерева из поддеревьев: эта операция не ассоциативна, и результат будет зависеть от группировки;
- прямой расчет средних значений: avg также не ассоциативен (и в нем нет нейтрального элемента); чтобы вычислить среднее значение, нужно вычислить моменты .
Вопросы производительности
[ редактировать ]Программы MapReduce не гарантированно будут быстрыми. Основное преимущество этой модели программирования заключается в использовании оптимизированной операции перемешивания платформы и необходимости писать только Map и уменьшить части программы . Однако на практике автору программы MapReduce приходится учитывать этап перемешивания; в частности, функция секционирования и объем данных, записываемых функцией Map , могут иметь большое влияние на производительность и масштабируемость. Дополнительные модули, такие как функция «Объединитель», могут помочь уменьшить объем данных, записываемых на диск и передаваемых по сети. Приложения MapReduce могут добиться сублинейного ускорения при определенных обстоятельствах. [ 22 ]
При разработке алгоритма MapReduce автору необходимо выбрать хороший компромисс. [ 11 ] между вычислениями и затратами на связь. Стоимость связи часто доминирует над стоимостью вычислений, [ 11 ] [ 22 ] и многие реализации MapReduce предназначены для записи всех сообщений в распределенное хранилище для восстановления после сбоя.
При настройке производительности MapReduce необходимо учитывать сложность отображения, перемешивания, сортировки (группировки по ключу) и сокращения. Объем данных, создаваемых картографами, является ключевым параметром, который перемещает большую часть вычислительных затрат между картографированием и сокращением. Сокращение включает в себя сортировку (группировку ключей), имеющую нелинейную сложность. Следовательно, небольшие размеры разделов сокращают время сортировки, но здесь есть компромисс, поскольку наличие большого количества редукторов может быть непрактичным. Влияние размера разделенного блока незначительно (если только он не выбран особенно неудачно, скажем, <1 МБ). Выигрыш от чтения нагрузки с локальных дисков некоторыми картографами в среднем незначителен. [ 23 ]
Для процессов, которые выполняются быстро и данные помещаются в основную память одного компьютера или небольшого кластера, использование платформы MapReduce обычно неэффективно. Поскольку эти платформы предназначены для восстановления после потери целых узлов во время вычислений, они записывают промежуточные результаты в распределенное хранилище. Такое восстановление после сбоя обходится дорого и окупается только тогда, когда в вычислениях участвует множество компьютеров и время выполнения вычислений длительное. Задачу, которая выполняется за секунды, в случае ошибки можно просто перезапустить, а вероятность отказа хотя бы одной машины быстро растет с увеличением размера кластера. В таких задачах реализации, сохраняющие все данные в памяти и просто перезапускающие вычисления при сбоях узла или — когда данных достаточно мало — нераспределенные решения, часто будут быстрее, чем система MapReduce.
Распределение и надежность
[ редактировать ]MapReduce обеспечивает надежность за счет разделения ряда операций над набором данных на каждый узел сети. Ожидается, что каждый узел будет периодически отчитываться о выполненной работе и обновлениях статуса. Если узел молчат дольше этого интервала, главный узел (аналогично главному серверу в файловой системе Google ) записывает узел как неработающий и отправляет назначенную ему работу другим узлам. Отдельные операции используют атомарные операции для именования выходных файлов в качестве проверки, чтобы убедиться в отсутствии запущенных параллельных конфликтующих потоков. Когда файлы переименовываются, их можно также скопировать под другое имя помимо имени задачи (с учетом побочных эффектов ).
Операции сокращения работают примерно так же. Из-за своих худших свойств в отношении параллельных операций главный узел пытается запланировать операции сокращения на том же узле или в той же стойке, что и узел, на котором хранятся обрабатываемые данные. Это свойство желательно, поскольку оно сохраняет полосу пропускания в магистральной сети центра обработки данных.
Реализации не обязательно обладают высокой надежностью. Например, в старых версиях был единственной Hadoop NameNode точкой отказа распределенной файловой системы. Более поздние версии Hadoop имеют высокую доступность с активным/пассивным переключением при отказе для «NameNode».
Использование
[ редактировать ]MapReduce полезен в широком спектре приложений, включая распределенный поиск на основе шаблонов, распределенную сортировку, обращение графа веб-ссылок, разложение по сингулярным значениям и т. д. [ 24 ] статистика журнала веб-доступа, инвертированного индекса построение , кластеризация документов , машинное обучение , [ 25 ] и статистический машинный перевод . Более того, модель MapReduce была адаптирована к нескольким вычислительным средам, таким как многоядерные и многоядерные системы. [ 26 ] [ 27 ] [ 28 ] сетки рабочего стола, [ 29 ] мультикластер, [ 30 ] волонтерские вычислительные среды, [ 31 ] динамические облачные среды, [ 32 ] мобильные среды, [ 33 ] и высокопроизводительные вычислительные среды. [ 34 ]
В Google MapReduce использовалась для полной регенерации индекса Google во Всемирной паутине . Он заменил старые специальные программы, которые обновляли индекс и проводили различные анализы. [ 35 ] С тех пор разработка в Google перешла на такие технологии, как Percolator, FlumeJava. [ 36 ] и MillWheel , которые предлагают потоковую обработку и обновления вместо пакетной обработки, что позволяет интегрировать «живые» результаты поиска без перестроения полного индекса. [ 37 ]
Стабильные входные и выходные данные MapReduce обычно хранятся в распределенной файловой системе . Временные данные обычно хранятся на локальном диске и извлекаются редукторами удаленно.
Критика
[ редактировать ]Отсутствие новизны
[ редактировать ]Дэвид ДеВитт и Майкл Стоунбрейкер , ученые-компьютерщики, специализирующиеся на параллельных базах данных и архитектурах без разделяемого доступа , критически оценили широту проблем, для решения которых можно использовать MapReduce. [ 38 ] Они назвали его интерфейс слишком низкоуровневым и поставили под сомнение, действительно ли он представляет собой сдвиг парадигмы, о котором утверждают его сторонники. [ 39 ] Они оспорили утверждения сторонников MapReduce о новизне, сославшись на Teradata как на пример предшествующего уровня техники , существующего уже более двух десятилетий. Они также сравнили программистов MapReduce с программистами CODASYL , отметив, что оба «пишут на низкоуровневом языке , выполняя низкоуровневые манипуляции с записями». [ 39 ] Использование MapReduce входных файлов и отсутствие поддержки схемы препятствует повышению производительности, обеспечиваемому обычными функциями системы баз данных, такими как B-деревья и хэш-секционирование , хотя такие проекты, как Pig (или PigLatin) , Sawzall , Apache Hive , [ 40 ] HBase [ 41 ] и Бигтабл [ 41 ] [ 42 ] решают некоторые из этих проблем.
Грег Йоргенсен написал статью, опровергающую эти взгляды. [ 43 ] Йоргенсен утверждает, что весь анализ ДеВитта и Стоунбрейкера беспочвенен, поскольку MapReduce никогда не разрабатывалась и не предназначалась для использования в качестве базы данных.
Впоследствии ДеВитт и Стоунбрейкер опубликовали в 2009 году подробное сравнительное исследование, сравнивающее производительность подходов Hadoop MapReduce и RDBMS для решения нескольких конкретных задач. [ 44 ] Они пришли к выводу, что реляционные базы данных предлагают реальные преимущества для многих видов использования данных, особенно при сложной обработке или в тех случаях, когда данные используются на предприятии, но пользователям может быть проще использовать MapReduce для простых или одноразовых задач обработки.
Парадигма программирования MapReduce также была описана в диссертации Дэнни Хиллиса 1985 года. [ 45 ] предназначен для использования на Connection Machine , где это называлось «xapping/reduction». [ 46 ] и полагался на специальное оборудование этой машины для ускорения картирования и уменьшения. Диалект, который в конечном итоге использовался для Connection Machine, StarLisp 1986 года , имел параллельные *map
и reduce!!
, [ 47 ] который, в свою очередь, был основан на Common Lisp 1984 года , который имел непараллельные map
и reduce
встроенный. [ 48 ] Древовидный . Connection Machine архитектура гиперкуба подход, который использует для выполнения reduce
в время [ 49 ] По сути, это то же самое, что и подход, упомянутый в документе Google как предыдущая работа. [ 3 ] : 11
В 2010 году Google получил так называемый патент на MapReduce. Патент, поданный в 2004 году, может охватывать использование MapReduce программным обеспечением с открытым исходным кодом, таким как Hadoop , CouchDB и другими. Редактор журнала Ars Technica признал роль Google в популяризации концепции MapReduce, но усомнился в том, является ли патент действительным или новым. [ 50 ] [ 51 ] В 2013 году в рамках своего «Обещания не утверждать патенты (OPN)» Google обязалась использовать патент только в защитных целях. [ 52 ] [ 53 ] Ожидается, что срок действия патента истечет 23 декабря 2026 года. [ 54 ]
Ограниченная среда программирования
[ редактировать ]Задачи MapReduce должны быть написаны как ациклические программы потока данных, т. е. преобразователь без сохранения состояния, за которым следует преобразователь без сохранения состояния, которые выполняются планировщиком пакетных заданий. Эта парадигма затрудняет повторные запросы к наборам данных и накладывает ограничения, которые ощущаются в таких областях, как графов . обработка [ 55 ] где итеративные алгоритмы, которые повторно обращаются к одному рабочему набору несколько раз, являются нормой, а также, при наличии дисковых данных с высокой задержкой , даже в области машинного обучения, где требуется несколько проходов через данные, даже если алгоритмы могут это допустить. последовательный доступ к данным при каждом проходе. [ 56 ]
См. также
[ редактировать ]Реализации MapReduce
[ редактировать ]Ссылки
[ редактировать ]- ^ «Учебное пособие по MapReduce» . Апач Хадуп . Проверено 3 июля 2019 г.
- ^ «Google освещает внутреннюю работу центра обработки данных» . cnet.com . 30 мая 2008 г. Архивировано из оригинала 19 октября 2013 г. Проверено 31 мая 2008 г.
- ^ Перейти обратно: а б «MapReduce: упрощенная обработка данных в больших кластерах» (PDF) . googleusercontent.com .
- ^ Уикхэм, Хэдли (2011). «Стратегия разделения, применения и объединения для анализа данных» . Журнал статистического программного обеспечения . 40 : 1–29. дои : 10.18637/jss.v040.i01 .
- ^ «Наша абстракция основана на отображении и сокращении примитивов, присутствующих в Lisp и многих других функциональных языках». - «MapReduce: упрощенная обработка данных в больших кластерах» , Джеффри Дин и Санджай Гемават; из исследований Google
- ^ Ламмель, Р. (2008). «Модель программирования Google Map уменьшает — новый взгляд». Наука компьютерного программирования . 70 : 1–30. дои : 10.1016/j.scico.2007.07.001 .
- ^ http://www.mcs.anl.gov/research/projects/mpi/mpi-standard/mpi-report-2.0/mpi2-report.htm Стандарт MPI 2
- ^ «MPI уменьшает и полностью уменьшает · Учебное пособие по MPI» . mpitutorial.com .
- ^ «Выполнение параллельного ранжирования с помощью MPI · Учебное пособие по MPI» . mpitutorial.com .
- ^ «MongoDB: ужасная производительность MapReduce» . Переполнение стека. 16 октября 2010 г.
Реализация MapReduce в MongoDB, очевидно, не имеет ничего общего с сокращением карты. Потому что, судя по всему, что я читал, он однопоточный, а Map-Ruce предназначен для параллельного использования в кластере. ... MongoDB MapReduce является однопоточным на одном сервере...
- ^ Перейти обратно: а б с Ульман, доктор медицинских наук (2012). «Разработка хороших алгоритмов MapReduce» . XRDS: Crossroads, журнал ACM для студентов . 19 :30–34. дои : 10.1145/2331042.2331053 . S2CID 26498063 .
- ^ Свердлик, Евгений (25 июня 2014 г.). «Google отказывается от MapReduce в пользу новой системы гипермасштабной аналитики» . Знание дата-центра . Проверено 25 октября 2015 г.
«Мы больше не используем MapReduce» [Урс Хёльцле, старший вице-президент по технической инфраструктуре Google]
- ^ Харрис, Деррик (27 марта 2014 г.). «Apache Mahout, оригинальный проект машинного обучения Hadoop, уходит с MapReduce» . Гигаом . Проверено 24 сентября 2015 г.
Apache Mahout [...] присоединяется к исходу из MapReduce.
- ^ Чайковский, Гжегож; Мариан Дворский; Джерри Чжао; Майкл Конли (7 сентября 2011 г.). «Сортировка петабайтов с помощью MapReduce – следующий эпизод» . Проверено 7 апреля 2014 г.
- ^ «Учебное пособие по MapReduce» .
- ^ «Apache/Hadoop-mapreduce» . Гитхаб . 31 августа 2021 г.
- ^ «Пример: подсчитать количество вхождений слов» . Google Исследования . Проверено 18 сентября 2013 г.
- ^ Фегарас, Леонидас (2017). «Алгебра для распределенной аналитики больших данных». Журнал функционального программирования . 28 . дои : 10.1017/S0956796817000193 . S2CID 44629767 .
- ^ Лин, Джимми (29 апреля 2013 г.). «Monoidify! Моноиды как принцип разработки эффективных алгоритмов MapReduce». arXiv : 1304.7544 [ cs.DC ].
- ^ «Абстрактная алгебра для Scala» .
- ^ «Кодирование Map-Reduce как моноида со сгибанием влево» . 5 сентября 2016 г.
- ^ Перейти обратно: а б Сенгер, Гермес; Хиль-Коста, Вероника; Арантес, Лусиана; Маркондес, Сезар АС; Марин, Маурисио; Сато, Лирия М.; да Силва, Фабрисио AB (1 января 2015 г.). «Анализ стоимости и масштабируемости BSP для операций MapReduce». Параллелизм и вычисления: практика и опыт . 28 (8): 2503–2527. дои : 10.1002/cpe.3628 . hdl : 10533/147670 . ISSN 1532-0634 . S2CID 33645927 .
- ^ Берлинска, Джоанна; Дроздовский, Мацей (01 декабря 2010 г.). «Планирование делимых вычислений MapReduce». Журнал параллельных и распределенных вычислений . 71 (3): 450–459. дои : 10.1016/j.jpdc.2010.12.004 .
- ^ Босах Заде, Реза; Карлссон, Гуннар (2013). «Квадрат матрицы, не зависящий от измерения, с использованием MapReduce» (PDF) . Стэнфордский университет . arXiv : 1304.1467 . Бибкод : 2013arXiv1304.1467B . Проверено 12 июля 2014 г.
- ^ Нг, Эндрю Ю.; Брадски, Гэри; Чу, Ченг-Тао; Олукотун, Кунле; Ким, Сан Гюн; Линь, И-Ань; Ю, ЮаньЮань (2006). «Map-Reduce для машинного обучения на многоядерных процессорах» . НИПС 2006.
- ^ Рейнджер, К.; Рагураман, Р.; Пенметса, А.; Брадски, Г.; Козыракис, К. (2007). «Оценка MapReduce для многоядерных и многопроцессорных систем». 2007 13-й Международный симпозиум IEEE по высокопроизводительной компьютерной архитектуре . п. 13. CiteSeerX 10.1.1.220.8210 . дои : 10.1109/HPCA.2007.346181 . ISBN 978-1-4244-0804-7 . S2CID 12563671 .
- ^ Он, Б.; Фанг, В.; Луо, К.; Говиндараджу, Северная Каролина; Ван, Т. (2008). «Марс: платформа MapReduce для графических процессоров» (PDF) . Материалы 17-й международной конференции по параллельным архитектурам и методам компиляции — PACT '08 . п. 260. дои : 10.1145/1454115.1454152 . ISBN 9781605582825 . S2CID 207169888 .
- ^ Чен, Р.; Чен, Х.; Занг, Б. (2010). «Tiled-MapReduce: оптимизация использования ресурсов многоядерными приложениями с параллельными данными с помощью тайлинга». Материалы 19-й международной конференции по параллельным архитектурам и методам компиляции — PACT '10 . п. 523. дои : 10.1145/1854273.1854337 . ISBN 9781450301787 . S2CID 2082196 .
- ^ Тан, Б.; Мока, М.; Шевалье, С.; Он, Х.; Федак, Г. (2010). «На пути к MapReduce для настольных грид-вычислений» (PDF) . Международная конференция 2010 г. по P2P, параллельным, грид-, облачным и интернет-вычислениям . п. 193. CiteSeerX 10.1.1.671.2763 . дои : 10.1109/3PGCIC.2010.33 . ISBN 978-1-4244-8538-3 . S2CID 15044391 .
- ^ Луо, Ю.; Го, З.; Сан, Ю.; Плейл, Б. ; Цю, Дж.; Ли, В. (2011). «Иерархическая структура для междоменного выполнения MapReduce» (PDF) . Материалы второго международного семинара по новым вычислительным методам в науках о жизни (ECMLS '11) . CiteSeerX 10.1.1.364.9898 . дои : 10.1145/1996023.1996026 . ISBN 978-1-4503-0702-4 . S2CID 15179363 .
- ^ Лин, Х.; Ма, Х.; Арчулета, Дж.; Фэн, туалет; Гарднер, М.; Чжан, З. (2010). «ЛУНА: MapReduce в оппортунистических средах» (PDF) . Материалы 19-го Международного симпозиума ACM по высокопроизводительным распределенным вычислениям – HPDC '10 . п. 95. дои : 10.1145/1851476.1851489 . ISBN 9781605589428 . S2CID 2351790 .
- ^ Мароццо, Ф.; Талия, Д.; Трунфио, П. (2012). «P2P-MapReduce: Параллельная обработка данных в динамических облачных средах» . Журнал компьютерных и системных наук . 78 (5): 1382–1402. дои : 10.1016/j.jcss.2011.12.021 .
- ^ Доу, А.; Калогераки, В.; Гунопулос, Д.; Миеликайнен, Т.; Туулос, В.Х. (2010). «Misco: платформа MapReduce для мобильных систем». Материалы 3-й Международной конференции по всепроникающим технологиям, связанным с вспомогательной средой – PETRA '10 . п. 1. дои : 10.1145/1839294.1839332 . ISBN 9781450300711 . S2CID 14517696 .
- ^ Ван, Яньдун; Голдстоун, Робин; Ю, Вэйкуань; Ван, Дэн (май 2014 г.). «Характеристика и оптимизация резидентной памяти MapReduce в системах HPC». 2014 28-й Международный симпозиум IEEE по параллельной и распределенной обработке . IEEE. стр. 799–808. дои : 10.1109/IPDPS.2014.87 . ISBN 978-1-4799-3800-1 . S2CID 11157612 .
- ^ «Как работает Google» . baselinemag.com. 7 июля 2006 г.
Согласно презентации Дина, по состоянию на октябрь Google выполнял около 3000 вычислительных заданий в день через MapReduce, что составляет тысячи машино-дней. Помимо прочего, эти пакетные процедуры анализируют последние веб-страницы и обновляют индексы Google.
- ^ Чемберс, Крейг; Ранивала, Ашиш; Перри, Фрэнсис; Адамс, Стивен; Генри, Роберт Р.; Брэдшоу, Роберт; Вайценбаум, Натан (1 января 2010 г.). «ФлюмЯва». Материалы 31-й конференции ACM SIGPLAN по разработке и реализации языков программирования (PDF) . стр. 363–375. дои : 10.1145/1806596.1806638 . ISBN 9781450300193 . S2CID 14888571 . Архивировано из оригинала (PDF) 23 сентября 2016 года . Проверено 4 августа 2016 г.
- ^ Пэн Д. и Дабек Ф. (октябрь 2010 г.). Крупномасштабная дополнительная обработка с использованием распределенных транзакций и уведомлений. В ОСДИ (Том 10, стр. 1-15).
- ^ «Эксперты по базам данных прыгают через акулу MapReduce» .
- ^ Перейти обратно: а б Дэвид ДеВитт ; Майкл Стоунбрейкер . «MapReduce: большой шаг назад» . craig-henderson.blogspot.com . Проверено 27 августа 2008 г.
- ^ «Apache Hive – Индекс – Apache Software Foundation» .
- ^ Перейти обратно: а б «HBase – HBase Home – Apache Software Foundation» .
- ^ «Bigtable: распределенная система хранения структурированных данных» (PDF) .
- ^ Грег Йоргенсен . «Эксперты по реляционным базам данных бросают вызов акуле MapReduce» . типичныйprogrammer.com . Проверено 11 ноября 2009 г.
- ^ Павел, Андрей; Полсон, Эрик; Разин, Александр; Абади, Дэниел Дж.; ДеВитт, Девид Дж.; Мэдден, Сэмюэл; Стоунбрейкер, Майкл. «Сравнение подходов к крупномасштабному анализу данных» . Университет Брауна . Проверено 11 января 2010 г.
- ^ Хиллис, В. Дэнни (1986). Соединительная машина . МТИ Пресс . ISBN 0262081571 .
- ^ «Техническое описание соединительной машины модели CM-2» (PDF) . Корпорация Мыслящих Машин . 1 апреля 1987 г. Проверено 21 ноября 2022 г.
- ^ «Дополнение к справочному руководству *Lisp» (PDF) . Корпорация Мыслящих Машин . 1 сентября 1988 г. Проверено 21 ноября 2022 г.
- ^ «Проспект архитектуры Rediflow» (PDF) . Факультет компьютерных наук Университета Юты . 05.04.1986 . Проверено 21 ноября 2022 г.
- ^ Ранка, Санджай (1989). «2.6 Сумма данных». Алгоритмы гиперкуба для обработки изображений и распознавания образов (PDF) . Университет Флориды . Проверено 8 декабря 2022 г.
- ^ Пол, Райан (20 января 2010 г.). «Патент Google MapReduce: что это значит для Hadoop?» . Арс Техника . Проверено 21 марта 2021 г.
- ^ «Патент США: 7650331 — Система и способ эффективной крупномасштабной обработки данных» . uspto.gov .
- ^ Назер, Дэниел (28 марта 2013 г.). «Google дает открытое обещание не допускать заявлений о патентах и предлагает новые модели лицензирования» . Фонд электронных границ . Проверено 21 марта 2021 г.
- ^ Кинг, Рэйчел (2013). «Google расширяет открытое патентное обязательство еще на 79 вопросов по управлению центром обработки данных» . ЗДНет . Проверено 21 марта 2021 г.
- ^ «Система и метод эффективной обработки крупномасштабных данных» . Поиск по патентам Google. 18 июня 2004 года . Проверено 21 марта 2021 г.
- ^ Гупта, Упа; Фегарас, Леонидас (6 октября 2013 г.). «Анализ графов на основе карт в MapReduce» (PDF) . Материалы: Международная конференция IEEE по большим данным 2013 г. Международная конференция IEEE по большим данным 2013 г. Санта-Клара, Калифорния : IEEE . стр. 24–30.
- ^ Захария, Матей; Чоудхури, Мошараф; Франклин, Майкл; Шенкер, Скотт; Стойка, Ион (июнь 2010 г.). Spark: Кластерные вычисления с рабочими наборами (PDF) . ХотКлауд 2010.