使用 MapReduce 统计 HBase 成绩表中单科最高单科排名和总分排名的完整代码如下:
```java import java.io.IOException; import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil; import org.apache.hadoop.hbase.mapreduce.TableMapper; import org.apache.hadoop.hbase.mapreduce.TableReducer; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job;
public class HBaseRankCalculator { static class HBaseMapper extends TableMapper<Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text();
public void map(ImmutableBytesWritable row, Result value, Context context)
throws IOException, InterruptedException {
Stringval = new String(value.getValue(Bytes.toBytes("grade"), Bytes.toBytes("math")));
word.set(val);
context.write(word, one);
}
}
static class HBaseReducer extends TableReducer<Text, IntWritable, ImmutableBytesWritable> { public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } Put put = new Put(Bytes.toBytes(key.toString())); put.addColumn(Bytes.toBytes("rank"), Bytes.toBytes("math_rank"), Bytes.toBytes(sum)); context.write(null, put); } }
public static void main(String[] args) throws Exception { Configuration conf = HBaseConfiguration.create(); Job job = Job.getInstance(conf, "HBase Rank Calculator"); job.setJarByClass(HBaseRankCalculator.class);
Scan scan =new Scan();
scan.addColumn(Bytes.toBytes("grade"), Bytes.toBytes("math"));
TableMapReduceUtil.initTableMapperJob("scores", scan, HBaseMapper.class, Text.class, IntWritable.class, job);
TableMapReduceUtil.initTableReducerJob("r