Как MapReduce является хорошим методом для анализа логов http-сервера? - PullRequest
7 голосов
/ 02 июня 2009

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

Но вот моя проблема: Я не могу понять, как это может помочь с анализом логов http-сервера.

Насколько я понимаю, крупные компании (например, Facebook) используют MapReduce для вычисления своих http-журналов, чтобы ускорить процесс извлечения статистики аудитории из них. Компания, в которой я работаю, хотя и меньше, чем Facebook, имеет большой объем веб-журналов для ежедневных вычислений (100Go растет от 5 до 10 процентов в месяц). Сейчас мы обрабатываем эти журналы на одном сервере, и он работает просто отлично. Но распределение вычислительных заданий сразу же приходит на ум как полезная оптимизация.

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

  • Может ли концепция MapReduce действительно применяться для анализа блогов?
  • Является ли MapReduce самым умным способом сделать это?
  • Как бы вы поделили файлы веб-журнала между различными вычислительными экземплярами?

Спасибо.
Николя

Ответы [ 2 ]

16 голосов
/ 02 июня 2009

Может ли концепция MapReduce действительно применяться для анализа блогов?

Да.

Вы можете разбить ваш лог-файл hudge на куски, скажем, 10000 или 1000000 строк (что бы ни было хорошим кусочком для вашего типа лог-файла - для лог-файлов apache я бы пошел на большее число), передавая их некоторым картографам, которые извлекут что-то конкретное (например, «Браузер», «IP-адрес», «…», «Имя пользователя», «...») из каждой строки журнала, а затем уменьшите, посчитав количество раз, которое каждый из них появился (упрощенно):

  192.168.1.1,FireFox x.x,username1
  192.168.1.1,FireFox x.x,username1
  192.168.1.2,FireFox y.y,username1
  192.168.1.7,IE 7.0,username1

Вы можете извлечь браузеры, игнорируя версию, используя операцию карты, чтобы получить этот список:

FireFox
FireFox
FireFox
IE

Тогда уменьшите, чтобы получить это: FireFox, 3 IE, 1

Является ли MapReduce самым умным способом сделать это?

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

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

Вы можете начать с 1 клиента и расширить до 1000 ... У вас может даже быть клиент, который работает в качестве экранной заставки на всех ПК в локальной сети и запускает 8 клиентов на ваших 8-ядерных серверах, 2 на вашем двухъядерные ПК ...

С Pull: у вас может быть 100 или 10 клиентов, на многоядерных машинах может быть запущено несколько клиентов, и все, что клиент завершит, будет доступно для следующего шага. И вам не нужно делать какие-либо хеширования или назначения для работы, которая будет сделана. Это 100% динамика.

http://img355.imageshack.us/img355/7355/mqlogs.png

Как бы вы распределили файлы веб-журнала между различными вычислительными экземплярами?

По количеству элементов или строк, если это текстовый файл журнала.

Чтобы протестировать MapReduce, я хотел бы предложить вам поиграть с Hadoop.

1 голос
/ 02 июня 2009
  • Может ли концепция MapReduce действительно применяться для анализа блогов?

Конечно. Какие данные вы храните?

  • Является ли MapReduce самым умным способом сделать это?

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

  • Как бы вы разбили файлы веб-журнала между различными вычислительными экземплярами?

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

...