Я играю с Hadoop и настроил двухузловой кластер в Ubuntu. Пример WordCount работает просто отлично.
Теперь я хотел бы написать свою собственную программу MapReduce для анализа некоторых данных журнала (основная причина: это выглядит просто, и у меня много данных)
Каждая строка в журнале имеет этот формат
<UUID> <Event> <Timestamp>
где событие может быть INIT, START, STOP, ERROR и некоторые другие. Больше всего меня интересует прошедшее время между событиями START и STOP для одного и того же UUID.
Например, мой журнал содержит записи, подобные этим
35FAA840-1299-11DF-8A39-0800200C9A66 START 1265403584
[...many other lines...]
35FAA840-1299-11DF-8A39-0800200C9A66 STOP 1265403777
Моя текущая линейная программа читает файлы, запоминает начальные события в памяти и записывает истекшее время в файл, как только обнаружил соответствующее конечное событие (строки с другими событиями в настоящее время игнорируются, события ERROR делают недействительным UUID и это тоже будет игнорироваться) 1
Я бы хотел перенести это в программу Hadoop / MapReduce. Но я не уверен, как сделать сопоставление записей. Разбить / разбить файл на файл легко, и я думаю, что поиск совпадений будет редуцирующим классом. Но как это будет выглядеть? Как мне найти записи о сопоставлении в задании MapReduce?
Пожалуйста, имейте в виду, что моя основная задача - понять Hadopo / MapReduce; приветствуются ссылки на Pig и другие программы Apache, но я бы хотел решить эту проблему с помощью чистого Hadoop / MapReduce. Спасибо.
1) Поскольку журнал берется из работающего приложения, некоторые стартовые события могут еще не иметь соответствующих конечных событий, и будут конечные события без стартовых событий из-за разбиения файла журнала