2012-03-14 5 views
2

У меня есть программа mapreduce, которая сначала сканирует таблицу HBase.HBase Mapreduce output to hdfs & HBASe

Я хочу, чтобы выход редуктора проходил в hdfs, а выход редуктора записывался в таблицу hbase. Можно ли настроить редуктор для вывода в два разных местоположения/формата?

ответ

3

Редуктор может быть настроен на использование нескольких файлов для вывода с использованием MulitpleOutputsclass. Документация в верхней части этого класса обеспечивает четкий пример для записи в несколько файлов. Однако, поскольку для записи в HBase нет встроенного в Outputformat, вы можете рассмотреть возможность записи второго потока в определенное место на HDFS, а затем использовать другое задание для вставки его в HBase.

1

Если вы не хотите писать слишком много кода, просто откройте таблицу в методе настройки компаратора или редуктора и сделайте оператор put в таблицу hbase. С другой стороны, напишите свою работу так, чтобы выходной файл был hdfs-файлом. Таким образом, вы можете писать в hbase и hdfs.

Чтобы быть более сложным, когда вы выполняете context.write(), вы должны писать в файл hdfs, а с другой стороны, table.put может произойти, когда вы делаете put.

Кроме того, не забудьте закрыть стол и все остальное в методе cleanup(). Единственным фоном является то, что, скажем, 1000 карт, ваше табличное соединение будет открываться 1000 раз, но в любой момент времени на самом деле будет работать только максимальное количество ваших карт, поэтому, вероятно, будет 50, в зависимости от вашей настройки. Работает для меня хотя бы!