Я не уверен, как бы вы сделали это, используя couchdb. Насколько я знаю, нет возможности напрямую читать данные couchdb в hadoop. Самая близкая вещь, о которой я знаю, это Brisk , который сочетает в себе хадуп и кассандру. Это также бесплатно.
В качестве альтернативы, если это не должно занимать до минуты, вы можете вывести соответствующие данные в текстовые или последовательные файлы и использовать их в качестве входных данных.
Я думаю, вы должны сделать это в 2 этапа. Во-первых, сгенерируйте приобретенные копии, что в основном является примером подсчета слов, который так часто встречается в hadoop.
Так как вы можете относительно легко определить максимальное количество приобретенных копий, посмотрев на выходную информацию о приобретенной копии копий (это может быть работа сама по себе), вы можете затем создать собственный разделитель, который будет делить продукты в соответствии с копии куплены. Таким образом, если у вас есть 3 редуктора, а максимальная сумма, которую вы продаете, составляет 600 копий, то редуктор 1 берет продукты, продающие 0–200 копий, редуктор 2 - продукты, продающие 201–400, а редуктор 3 - продукты, продающие 401–600 копий. Затем вы можете объединить отсортированные выходные файлы редуктора, и вам будет продан ваш отсортированный список копий.
Или для исходного кода, посмотрите код теста производительности terasort здесь . Больше информации о занятиях Terasort здесь .
Таким образом, вы получите рабочий процесс, подобный:
- Задание для расчета количества проданных копий для продукта
- Задание, которое находит наибольшее количество проданных копий, основываясь на результатах предыдущего задания (хотя вы можете пропустить этот шаг в зависимости от того, как вы выполняете сортировку.)
- Задание, которое сортирует данные и выдает отсортированный список проданных копий продукта. Может выводиться через несколько файлов, поэтому вам может понадобиться простой скрипт, который объединяет их вместе.
Для получения справки по управлению многоэтапным рабочим процессом, подобным этому, взгляните на Oozie или Cascading .
Подробнее о сортировке см. этот ответ .