возможна ли эта архитектура в Hadoop MR? - PullRequest
3 голосов
/ 14 февраля 2010

Возможна ли следующая архитектура в Hadoop MapReduce?

Используется распределенное хранилище значений ключей (HBase). Таким образом, наряду со значениями, будет временная метка, связанная со значениями. Задачи Map & Reduce выполняются итеративно. Карта в каждой итерации должна принимать значения, которые были добавлены в предыдущую итерацию в хранилище (возможно, те, которые имеют последнюю метку времени?). Reduce должен принимать выходные данные Map, а также пары из хранилища, ключи которых соответствуют ключу (ключам), которые должны обрабатываться в текущей итерации. Вывод команды Reduce отправляется в магазин.

Если это возможно, какие классы (например: InputFormat, run () of Reduce) следует расширить, чтобы вместо обычной операции выполнялась вышеуказанная операция. Если это невозможно, есть ли альтернативы для достижения того же?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2010

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

Я бы собрал ключ и метку времени вместе в качестве ключа для пары. Оставляя ваше значение как значение пары:

  • HadoopKey = {ключ | отметка времени}
  • HadoopValue = {значение)

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

И важно, что пары для редуктора упорядочены по метке времени по убыванию. (KeyComparator)

Посмотрите на

  • Класс RawComparator,
  • Jobconf's setOutputValueGroupingComparator () &
  • метод setOutputKeyComparatorClass ()
  • и «Hadoop - полное руководство», глава 4, стр. 100
  • или просто спросите, нужна ли вам помощь; -)

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

Я думаю, что это должно сделать.

0 голосов
/ 16 февраля 2010

Итак, ваш «магазин» в итерации n-1 может быть таким:

ключ (отметка времени | значение)

a 1 | x, b 2 | x, c 3 | x, d 4 | x

В итерации n эти пары были добавлены: ... б 5 | х, д 6 | х

Картограф найдет эти 2 записи, потому что отметка времени> 4, и поместит их в промежуточные результаты

Теперь редуктор обнаружит, что для этих двух записей в хранилище n-1 есть еще две совпадающие записи: б 2 | х, д 4 | х

Таким образом, выходной сигнал фазы сокращения будет (независимо от порядка): б 5 | х, д 6 | х, б 2 | х, д 4 | х

Это то, что вы хотите?

...