Использование Mapreduce для отображения нескольких уникальных значений, не всегда присутствующих в одних и тех же строках - PullRequest
1 голос
/ 24 сентября 2010

Я столкнулся со сложной проблемой с Mapreduce. Я пытаюсь сопоставить 2 уникальных значения, которые не всегда присутствуют вместе в одной строке. После того как я отобразил их, мне нужно подсчитать общее количество уникальных событий для этого сопоставления.

Файлы журналов, которые я копирую, имеют размер 100 ГБ + без сжатия и разбиты на две части, которые мне нужно собрать. События распределены по многим различным файлам журнала. Я думаю, что самый простой способ описать проблему - показать образец журналов.

[2010/09/23 12:02am]   AAAAAAAAAA   BBBBBBBBBB   Event message type A
[2010/09/23 12:02am]                BBBBBBBBBB   Event message type B
[2010/09/23 12:03am]                BBBBBBBBBB   Event message type B
[2010/09/23 12:09am]                BBBBBBBBBB

[2010/09/23 12:01am]   CCCCCCCCCC   DDDDDDDDDD   Event message type A
[2010/09/23 12:05am]                DDDDDDDDDD   Event message type A
[2010/09/23 12:06am]                DDDDDDDDDD   Event message type C

2-й и 3-й столбцы - это уникальные идентификаторы, которые никогда не совпадают. Мне нужно наметить количество уникальных предметов в 4-м столбце, связанном со 2-м и 3-м столбцами. 2-й столбец всегда присутствует хотя бы один раз. 3-й столбец присутствует всегда. 4-й столбец может присутствовать или не присутствовать. Я все еще хочу считать 4-й столбец неизвестным событием. Фактическое число уникальных значений достигает миллионов, а общее количество строк журнала достигает миллиардов.

Решение для вышеупомянутого должно быть.

AAAAAAAAAA,BBBBBBBBBB,A    1
AAAAAAAAAA,BBBBBBBBBB,B    2
AAAAAAAAAA,BBBBBBBBBB,Unknown    1

CCCCCCCCCC,DDDDDDDDDD,A    2
CCCCCCCCCC,DDDDDDDDDD,C    1

Я думал о том, чтобы разбить 2-й и 3-й столбцы на 2 отдельных mapreduces, но объединить эти результаты вместе - это сложно. Не уверен, как сделать окончательный Mapreduce для объединения этих значений. 2-й столбец будет повсюду в файле. Это могло бы показать 1:00 тогда снова в 11:00.

Любые предложения о том, как я мог бы использовать Hadoop mapreduce для решения этой проблемы? Я использую потоковую передачу Hadoop, не знаю Java.

1 Ответ

2 голосов
/ 26 сентября 2010

Я предлагаю вам сделать это следующим образом:

  1. Убедитесь, что все записи содержат все значения.
  2. Агрегат (то есть счет).

Итак, вы начинаете с (небольшое отклонение от того, что вы показали):

[2010/09/23 12:01am]                BBBBBBBBBB   Event message type B
[2010/09/23 12:02am]   AAAAAAAAAA   BBBBBBBBBB   Event message type A
[2010/09/23 12:03am]                BBBBBBBBBB   Event message type B
[2010/09/23 12:09am]                BBBBBBBBBB   

[2010/09/23 12:01am]                DDDDDDDDDD   Event message type A
[2010/09/23 12:05am]   CCCCCCCCCC   DDDDDDDDDD   Event message type A
[2010/09/23 12:06am]                DDDDDDDDDD   Event message type C

Шаг 1 будет использовать «BBBBBBBBBB» в качестве ключа и выполнить вторичную сортировку ( См. Пример Hadoop и объяснение в книге Тома ), чтобы гарантировать, что запись с «AAAAAAAAAA» является первым, кто прибудет в редуктор. В редукторе вы даете всем записям то же значение «2-й столбец» («AAAAAAAAAA»), что и первое. Вы не агрегируете и просто делаете записи завершенными. Это означает также добавление «Неизвестно» в случае, если не было события.

Итак, после этого первого шага у вас будет что-то вроде этого:

   AAAAAAAAAA   BBBBBBBBBB   Event message type B
   AAAAAAAAAA   BBBBBBBBBB   Event message type A
   AAAAAAAAAA   BBBBBBBBBB   Event message type B
   AAAAAAAAAA   BBBBBBBBBB   Unknown

   CCCCCCCCCC   DDDDDDDDDD   Event message type A
   CCCCCCCCCC   DDDDDDDDDD   Event message type A
   CCCCCCCCCC   DDDDDDDDDD   Event message type C

Затем на втором шаге вы, по сути, делаете то же самое, что и хорошо известный пример "Wordcount". с полным "AAAAAAAAAA BBBBBBBBBB тип сообщения о событии типа B" как ваше "слово".

Дает вам желаемый результат:

   AAAAAAAAAA   BBBBBBBBBB   Event message type B     2
   AAAAAAAAAA   BBBBBBBBBB   Event message type A     1
   AAAAAAAAAA   BBBBBBBBBB   Unknown                  1

   CCCCCCCCCC   DDDDDDDDDD   Event message type A     2
   CCCCCCCCCC   DDDDDDDDDD   Event message type C     1

НТН

...