使用 MapReduce 教程的 WordCount 示例,我正在更改代码以将 reduce() 输出加载到 HBase 表中。任何人都可以建议 WordCount 示例代码中的更改。这对我会有很大帮助。谢谢。
user2391084
问问题
417 次
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 回答