我正在学习 HBase。我知道如何使用 Hadoop MapReduce 编写 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;
}
}
您可以在此处阅读有关表映射器的信息
在设置作业时,您应该能够使用 TableOutputFormat,而不是使用 FileOutputFormat。
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html
你仍然需要稍微修改你的 Reducer。
上面页面的引用:
转换 Map/Reduce 输出并将其写入 HBase 表。KEY 被忽略,而输出值必须是 Put 或 Delete 实例。