Какие проблемы MapReduce для решения проблемы?

Я читал о MapReduce для какое-то время-но что я могу'т понять, как кто-то будет принимать решение, использовать (или не использовать) в MapReduce.

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

Решение

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

С другой стороны, подсчета частоты слов в гигантском корпусе легко разбиваемы, и тривиально recombinable (вы просто складываете векторы, вычисленные для сегментов тела), поэтому карта-снизить является очевидным решением.

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

Комментарии (7)

Может ли проблема быть решена эффективно с помощью распределенных вычислений?

Если ответ на этот вопрос "да", то у вас есть проблемы кандидата для MapReduce. Это потому, что шаблон проблема поддается разбивается на более мелкие отдельные проблемы.

Ваша задача: разобрать эту книгу

Пример работает хорошо объяснил это. У вас есть большой документ (Моби Дик Германа Мелвилла) и ваша задача выполнить частотный анализ всех слов, используемых в нем.

Последовательный подход

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

Подход на основе MapReduce

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

Процесс чтения строки текста и собирая слова на карте фазу (создается простой карту, представляющим слова в соответствии с их периодичностью 1,2,3 и т. д.), то уменьшить фазу, когда каждая машина собирает свою линию карт в единую совокупную карте.

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

Резюме

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

Комментарии (2)

Шаблон MapReduce-это взято из мира функционального программирования. Это процесс нанесения, что называется catamorphism над структурой данных в параллельные. Функциональные программисты используют catamorphisms для почти всех простых преобразований или уплотнения.

Если исходить из ваших данных-это дерево, решающим фактором является ли вы можете вычислить значение для узла, используя только данные, содержащиеся в этом узле и вычисленные значения для своих детей.

Например, вы можете вычислить размер дерева с помощью catamorphism; вы бы вычислить сумму этих значений для всех детей плюс один.

Комментарии (3)

Карта/уменьшения является специфической формой определенного вида алгоритма. Вы используете его, чтобы превратить один большой набор данных в другой набор данных. (Результирующий набор данных может или не может быть огромным.) Если вы Don'т хотим, статический выходной набор данных в результате статических входных данных, то карту/уменьшить не подходит. Карта/уменьшить может легко сказать вам, сколько Джон Смитс в телефонной книге Манхэттена, но он не очень хорошо подходит для построения веб-сервера.

Кстати карту/уменьшить работ:

  • Карты занимает пары ключей (К1) и значения (V1), и отображает их на новый комплект ключей (К2) и значения (В2).
  • Снизить принимает все версии v2 значений с одинаковым ключом К2 и производит новую стоимость (В3).

В результате список (К1, В1) пар превращается в список (В3)С. (Конечно, ценность "и В3" могут быть составной, что включает в себя К2, которые могут быть определены, чтобы быть равными К1.)

Так вы использовать его:

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

  2. Вы можете представить выходные данные в список значений или пар ключ-значение (как правило, не слишком трудно, когда вы помните, что "ключ" и только означает "знака"), и

  3. Какими бы не были отношения, вы уверены, что каждый кусок входных данных влияет только на выходное значение для одного ключевого вывода.

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

Этап карта для разделения всех входных данных ключевых вывода. Это не'т придется произвести выходное значение, связанное с выходом ключа (что's выполнено по сокращению стадии), но это не обязательно однозначно присвоить каждому входу ключа значение паре способствуют более одного выходного ключа's стоимостью. Если данных слишком взаимосвязаны, то сокращения карты может не быть в состоянии справиться с проблемой. С другой стороны, это может быть просто, что вам нужно использовать несколько раундов карте/уменьшить.

Если вы можете'т выяснить, как превратить ваши преобразования данных в карту/уменьшить, то, конечно, это's не решение.

Есть настоящее искусство, чтобы выяснить, если проблема может быть разложена на что-то карту/уменьшить справлюсь. Например, V1 и V2 не могут быть в входных и выходных наборов данных на всех. Если вы просто хотите посчитать уникальных элементов во входных данных, то К1 = К2 = элемент и В1 = В2 = 1 или 0 или совсем ничего. Уменьшить просто производит В3 как сумма числа К2's оно было дано.

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

Комментарии (0)

Этот изв - приложений карту уменьшить (ППТ) может представлять интерес для вас. В ней обсуждаются различные приложения Г, и как один из обсуждаемых случаев, в нем показано, как, используя 100 инстансов EC2 и 24 часов, Нью-Йорк Таймс был способен преобразовать 4 ТБ по этой статьи до 1,5 ТБ из PDF-документов.

Другой набор примеров, где мистер помогли в ускорении производительности на: Астер - SQL для сокращения карты приведены некоторые примеры по SQL-карты сокращают технологии, включая обнаружение мошенничества, преобразования и другие.

Комментарии (1)

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

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

Причина вы, возможно, захотите использовать карту уменьшить, если это правда-это два раза: 1) это может быть немного чище и легче тестировать и отлаживать, если перерыв в функции map и reduce. 2) карты сокращают функций без гражданства и могут быть запущены одновременно, что ускоряет дело, если у вас есть несколько доступных процессоров и что-то вроде Hadoop и искры, что делает использование этого работать в кластере.

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

Самый простой пример, который хорошо работает с картой снижения, рассчитывают материал, который является очень дешевым по уменьшению. Именно поэтому количество слов-это часто используемый пример для карты сокращают. Вы можете в значительной степени ожидать линейную масштабируемость производительности С что usecase: каждый процессор вы добавите делает это быстрее.

Комментарии (0)

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

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

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

Комментарии (0)

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

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

--my initial set of test data, a list
tests = ["string1", "string2", "string3", ...]

--Map Step: turn strings into parsed results
--note the type, which demonstrates the map
applyParser :: [String] -> [Token]
--The actual function
applyParser input = map parser input

--Second map, turn tokens into output
showTokens :: [Token] -> [String]
showTokens t = map show t

--Reduce step, concat the results
combineResults :: [String] -> String
--In haskell, reduce is the foldl function, which takes an operation to fold with, a starting element, and a list to fold on
combineResults strings = foldl concat "" strings

--Finished program
testParser = print (combineResults(showTokens(applyParser tests)))

Конечно, это всего лишь педагогический. Мой фактический код выглядит немного по-другому, и использует внутренние функции (например, фолд, функция concatэто'т нужна, поскольку Хаскелл уже включаетunlinesчто ли[строка]->строка`). Моя главная мысль была в том, что я этого'т предвидеть через карту/уменьшить, когда я начал, она просто выравнивается к моим потребностям. Я хотел сделать кое-что со списками, затем повернуть мой список на один элемент производства. Использовать карту/уменьшить возникло естественным образом.

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

Комментарии (0)

Это parallelisable?

Любая проблема parallelisable по сути карта и створки; и наоборот, на карте шаг по своей сути parallelisable (и раз шаг может быть, в зависимости от структуры, над которой он's складной), так это двунаправленный собственность.

Комментарии (3)

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

Комментарии (0)

Здесь'ы на главные вопросы, которые я использую, чтобы зонд решения об использовании (или не использовании) в MapReduce.

  • Это достижение разумной параллельной производительности с минимальными усилиями программиста, важные для данной проблемы?

  • У меня большое количество (сотни) параллельно существующих элементами исполнения?

  • Есть ли отличные коммуникативные пропускной способности/пропускной способности между параллельными исполнения элементов?

  • Мне нужно обработать огромный объем (ТБ) данных?

  • Есть ли проблемы я пытаюсь решить разложить на map и reduce операции?

  • Карту: выполнить ту же операцию над разными данными.

  • Уменьшить: выполнение одной операции на каждую группу данных с карты.

Комментарии (0)

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

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

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

Комментарии (0)