使用MapReduce教程的WordCount示例,我正在更改代码以将reduce()输出加载到HBase表中。有人请建议WordCount示例代码中的更改。这对我很有帮助。感谢。
答案 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表名。您需要在运行应用程序之前创建表。