Чи є MapReduce чимось більшим, ніж просто програма ділення та перемоги?


26

Поділ проблеми на менші, поки окремі проблеми не можуть бути вирішені самостійно, а потім їх поєднання для відповіді на початкове питання, відоме як техніка проектування алгоритму розділення та підкорення . [Див.: Вступ до алгоритмів CLR]

Останнім часом такий підхід до вирішення обчислювальних задач, особливо в області дуже великих наборів даних, іменується MapReduce, а не ділити і перемагати.

Моє запитання таке: чи MapReduce є чимось іншим, ніж власний фреймворк, який покладається на підхід «поділити і перемогти», чи є до нього деталі, які роблять його певним в чомусь унікальним?


Розділити і перемогти - це клас алгоритмів. MapReduce - один із прикладів цього класу.
Мартін Спамер

Відповіді:


28

Якщо ви запитуєте про архітектуру MapReduce, це дуже просто техніка розбиття та перемоги . Однак будь-яка корисна архітектура MapReduce матиме гори іншої інфраструктури, щоб ефективно «розділити», «завоювати» та нарешті «зменшити» поставлену проблему. При великому розгортанні MapReduce (1000 обчислювальних вузлів) ці кроки розділити роботу, обчислити щось, а потім нарешті зібрати всі результати нетривіально. Такі речі, як балансування навантаження, виявлення мертвих вузлів, збереження проміжного стану (для тривалих проблем), самі по собі є важкими проблемами.


1
"Щоб ефективно" розділити "," завоювати "і, нарешті," зменшити "проблему" - це вводить в оману: крок "карта" не потребує вирішувача D&C (оскільки дані суворо незалежні), ви можете просто розподілити шматки роботи з використанням якогось планувальника; для кроку зменшення потрібна науково-дослідна робота.
Конрад Рудольф

4
Слово "просто" вводить в оману в цьому контексті.

Як зазначалося, ця відповідь не просто вводить в оману, а відверто хибний. MapReduce, безумовно, не є "лише технікою розділення та підкорення".
Джеррі Труну

10

MapReduce є основою для впровадження алгоритмів розділення і підкорення надзвичайно масштабованим способом , автоматично розподіляючи одиниці роботи на вузли в довільно великому кластері комп'ютерів і автоматично обробляючи збої окремих вузлів шляхом перерозподілу одиниці роботи. до іншого вузла.

Це не надто складна концепція, а дуже корисний фрагмент інфраструктури.


10

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

У типовій (попередній) системі ділення і підкорення ви поділяєте роботу серійно, виконуюте паралельно робочі пакети, а потім знову з’єднуєте результати цієї роботи.

У MapReduce ви поділяєте роботу послідовно, паралельно виконуєте робочі пакети та тегуєте результати, щоб вказати, які результати й з якими іншими результатами. Потім об'єднання послідовно для всіх результатів з одним і тим же тегом, але може виконуватися паралельно для результатів, які мають різні теги.

У більшості попередніх систем крок злиття став вузьким місцем для всіх, окрім самих тривіальних завдань. З MapReduce це все ще може бути, якщо характер завдань вимагає, щоб усі об'єднання виконувалися серійно. Якщо, однак, завдання дозволяє певний ступінь паралельного об'єднання результатів, то MapReduce дає простий спосіб скористатися цією можливістю. Більшість інших систем виконують одне з двох: або виконують всі об'єднання послідовно лише тому, що це може знадобитися для деяких завдань, або ж статично визначають паралельне злиття для певної задачі. MapReduce надає вам достатньо даних на кроці злиття, щоб автоматично планувати максимально паралельно паралельно, одночасно забезпечуючи (якщо ви не помилилися на етапі відображення) збереження когерентності.

Також зауважте, що в MapReduce мається на увазі, що всі кроки можуть бути рекурсивними, тому, можливо, у мене є початковий етап картографування, який розбиває велике завдання на 5 менших завдань, які можна виконати паралельно - але кожен з них може (у обіг) нанесіть на карту ряд інших менших паралельних завдань тощо.

Це призводить до того, що структура дерева як на картографуванні, так і на скорочуючих сторонах швидко розбиває велике завдання на достатню кількість, щоб скористатися багатьма машинами.


7

MapReduce - це не просто техніка розділення та перемоги, хоча так виглядає у багатьох прикладах.

На етапі картографування ви можете і часто хочете зробити відношення один до багатьох. Таким чином, ви не просто ділите на справи.

Між картою та скороченням є або (залежно від реалізації) сортування, або хеширующий крок. Ефективність цієї операції надзвичайно важлива для загальних потреб у ресурсах. Його деталі не помітні для програміста програми, але цей крок є основою рамки.

Операція скорочення - це тип злиття. Що можна вважати перемогою, але на практиці, як правило, або "випромінювати дані для подальшого використання" або "зберігати дані у сховищі даних". (Зверніть увагу, якщо у вас є великі набори даних, ви дійсно хочете, щоб все поширювалося, включаючи вхідні та кінцеві результати. Отже, розподілене сховище ключа / значення має сенс і як місце для отримання вводу, і для зберігання результатів.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.