使用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表名。您需要在运行应用程序之前创建这个表。