Цитата:
Сообщение от seobatman
бро а расскажи подробней про map-reduce, очень интересно. на нескольких машинах запускаешь ?
|
сам MapReduce - это вроде запатентованная гугловская технология, которая дала им резкий толчок в развитии, позволили стать тем монстром, которые они сейчас. МепРедьюс предназначен для обработки данных, т.е. это обычно активное использование процессора и памяти.
Смысл технологии заключается в распараллеливании выполнения одной задачи. В таких системах делается мастер нода, или главный управляющий алгоритм, на вход которого поступают данные для обработки. Но эта мастер нода сама не выполняет обработку, а только управляет всем процессом, а именно - разделяет входные данные на куски и передает эти куски воркерам - рабочие ноды. Это называется mapping. Т.е. главный(центральный) алгоритм распараллеливает данные и делегирует их обработку дальше в другие ноды. Воркеры обычно все одинаковые и умеют только обрабатывать данные и возвращать результат. После того как воркер вернул результат обработки(а это может происходить асинхронно), мастер нода решает куда этот результат деть или что с ним делать. Т.е. мастер нода обрабатывает результаты всех воркеров - это называется Reduce.
Конкретно у гугла и в большом хайлоаде ноды - это отдельные компы/серверы. Допустим один центральный сервер и 100 воркеров. Центральный сервер в начале работы раздает задания воркера и дальше сидит-ждет результатов для операции reduce. Ну вообще говоря, reduce тоже могут делать не одна центральная нода, а несколько.
Самих реализаций этого алгоритма несколько. Ну главная - это у гугла. Также есть известный фреймворк Apache под названием Hadoop, который позволяет прозрачно организовать тукую распределенную вычислительную систему.
Я себе сам случайно реализовал подобие такого алгоритма, но на пхп. Поигравшись, понял, что надо переходить на апач-технологии, на java.
Пробовал делать обработку данных на нескольких VPS. Смысл в том, что в моей обработке очень нужен диск, а на VPS диск общий с соседствующими VPS + контролировать диск со стороны гипервизора сложно или вообще они это не делают. Ну короче говоря, я садился на шею у vps-соседей, наверно у них сайты лежали
Если бы я взял отдельный сервер, очередь диск на нем в разы быстрее забилась бы. Ну и мне больше было интересно протестить, как все работает на сетке, а впс - это дешево.
Ну и можно использовать этот же принцип на одном сервере. Например в mysql. Я использовал memory таблицы, а у них локи на всю таблицу. А мне надо было читать-писать(одна двойная операция) со скоростями более 10к в секунду. Вот после распараллеливания обработки на несколько таблиц в пиках доходило до 120к операций в секунду. Но минус был(и есть) в reduce: конкретно на этой задаче он у меня долгий.
Ну и вообще надо смотреть конкретную задачу и думать, нужно оно там или нет. Кстати, MR распространен в функциональном программировании.
пример использовани MR в сео-инструментарии:
http://habrahabr.ru/blogs/algorithm/103490/