2013-09-03 5 views
0

Я изучаю HBase. Я знаю, как писать Java-программу с использованием Hadoop MapReduce и записывать вывод в HDFS; но теперь я хочу написать тот же вывод в HBase вместо HDFS. Он должен иметь похожий код, как я делал раньше в HDFS вещи:HBase mapreduce: писать в HBase в Reducer

context.write(key,value); 

Может кто-нибудь показать мне пример для достижения этой цели?

ответ

2

Вот один из способов сделать это:

public static class MyMapper extends TableMapper<ImmutableBytesWritable, Put> { 

public void map(ImmutableBytesWritable row, Result value, Context context) throws IOException, InterruptedException { 
    // this example is just copying the data from the source table... 
    context.write(row, resultToPut(row,value)); 
} 

private static Put resultToPut(ImmutableBytesWritable key, Result result) throws IOException { 
    Put put = new Put(key.get()); 
    for (KeyValue kv : result.raw()) { 
     put.add(kv); 
    } 
    return put; 
    } 
} 

Вы можете прочитать здесь о Table Mapper

2

Вместо использования FileOutputFormat при настройке вашей работы, вы должны быть в состоянии использовать TableOutputFormat.

http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html

Вы все равно придется изменить свой Reducer немного.

Цитата со страницы выше:

Преобразовать Map/Reduce выход и записать его в таблицу HBase. KEY игнорируется, а выходное значение должно быть экземпляром Put или Delete.

Смежные вопросы