我正在学习HBase。我知道如何使用HadoopMapReduce编写Java程序,并将输出写入HDFS;但现在我想将相同的输出写入HBase,而不是HDFS。它应该有一些类似的代码,就像我以前在HDFS中做的一样:
context.write(key,value);
有人能给我举个例子来实现这一点吗?
这里有一种方法:
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;
}
}
您可以在此处阅读有关TableMapper的信息
在设置作业时,您应该能够使用TableOutputFormat,而不是使用FileOutputFormat。
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html
你仍然需要稍微修改你的减速器。
上页引用:
转换Map/Reduce输出并将其写入HBase表。KEY被忽略,而输出值必须是Put或Delete实例。