Какой лучший способ сделать тесты на членство в setoop? - PullRequest
0 голосов
/ 17 сентября 2011

Я использую hadoop для обработки последовательности аналитических записей для моего приложения. Я хочу классифицировать пользователей на основе того, какие события я вижу в их потоке, а затем использовать эту информацию на более поздней стадии при повторной итерации по потоку. Например, предположим, что я хочу сгенерировать данные обо всех пользователях, которые никогда не активируют мое приложение.

Я могу определить, кто никогда не активируется, итерируя по потоку один раз, как часть моего 1-го раунда сокращения.

Вопрос в том, куда я помещаю данные, которые "пользователь X никогда не активировал", чтобы в следующий раз, когда я перебираю поток в моем устройстве отображения 2-го раунда, я мог найти этот факт? У меня есть несколько идей, но я не уверен, какой правильный путь hasoop:

  • выведите побочный файл из моего редуктора 1-го раунда, содержащий список пользователей, прочитайте его во втором раунде - как мне избежать чтения всего файла в память, как мне работать с несколькими побочными файлами с нескольких фронтов -конечные редукторы (есть ли хороший способ сортировки / объединения побочных файлов)?
  • буферизует все события пользователя в памяти в моем редукторе, так что я могу пометить их все как «не активированные», прежде чем выводить их на диск - кажется немного странным.

Является ли один из тех "правильных путей", есть ли другой способ, по которому я скучаю?

Я использую AWS Elastic MapReduce.

1 Ответ

0 голосов
/ 17 сентября 2011

Это довольно просто с mapreduce.

Mapper: генерировать каждое событие как ключ, а ваш пользователь - как значение.

например:

USER_NEVER_ACTIVATED_APP : x
USER_PAID_FOR_APP : x
USER_NEVER_ACTIVATED_APP : y

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

USER_NEVER_ACTIVATED_APP : x,y
USER_PAID_FOR_APP : x

Таким образом, вам даже не нужен второй картограф или работа.

...