如何将reduce输出加载到HBase中



使用MapReduce教程中的WordCount示例,我正在更改代码以将reduce()输出加载到HBase表中。有没有人建议在WordCount示例代码的变化。这将对我有很大帮助。谢谢。

您可以使用以下代码来编写您的reducer,因为您使用的是旧的API。您需要实现org.apache.hadoop.hbase.mapred.TableReduce<Text, IntWritable>:

public static class Reduce extends MapReduceBase implements
    TableReduce<Text, IntWritable> {
public static final byte[] CF = "cf".getBytes();
public static final byte[] COUNT = "count".getBytes();
@Override
public void reduce(Text key, Iterator<IntWritable> values,
        OutputCollector<ImmutableBytesWritable, Put> output,
        Reporter reporter) throws IOException {
    int i = 0;
    while (values.hasNext()) {
        i += values.next().get();
    }
    Put put = new Put(Bytes.toBytes(key.toString()));
    put.add(CF, COUNT, Bytes.toBytes(i));
    output.collect(null, put);
}
}

如果您发现任何错误,您可以检查是否使用了org.apache.hadoop.hbase.mapred.*包中的类。

记住添加以下行来设置JobConf:

TableMapReduceUtil.initTableReduceJob("wordcount", Reduce.class, conf);

你的密码打错了。是initTableReduceJob而不是initTableReducerJob。这里"wordcount"是HBase表名。您需要在运行应用程序之前创建这个表。

最新更新