如何加载减少输出到HBase?

时间:2013-06-14 03:44:49

标签: hbase

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

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码编写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表名。您需要在运行应用程序之前创建表。