1

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

4

1 回答 1

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);
}
}

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

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

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

您的代码输入错误。它initTableReduceJob不是initTableReducerJob. 这里的“wordcount”是 HBase 表名。您需要在运行应用程序之前创建表。

于 2013-06-14T04:12:35.253 回答