HBase mapreduce:写入Reducer中的HBase

时间:2013-09-03 23:25:25

标签: java hadoop mapreduce hbase

我正在学习HBase。我知道如何使用Hadoop MapReduce编写Java程序并将输出写入HDFS;但现在我想将相同的输出写入HBase,而不是HDFS。它应该有一些类似的代码,就像我之前在HDFS中所做的那样:

context.write(key,value);

有人能告诉我一个实现这个目的的例子吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

在设置作业时,您应该能够使用TableOutputFormat,而不是使用FileOutputFormat。

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

您仍需要稍微修改一下Reducer。

上面的引文:

  

转换Map / Reduce输出并将其写入HBase表。 KEY被忽略,而输出值必须是Put或Delete实例。