HBase结合wordcount

package com.hbase;
import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class WordCount extends Configured implements Tool {
 public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
  public void map(LongWritable key, Text value, Context context) {
   String[] strs = value.toString().split(" ");
   for(String str:strs) {
    try {
     context.write(new Text(str), new IntWritable(1));
    } catch (IOException e) {
     e.printStackTrace();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
  }
 }
 
 public static class Reduce extends Reducer<Text, IntWritable, NullWritable, Put> {
  public void reduce(Text key, Iterable<IntWritable> values, Context context) {
   int sum = 0;
   Iterator<IntWritable> it = values.iterator();
   while(it.hasNext()) {
    sum = sum + it.next().get();
   }
   try {
    //key作为rowkey
    Put put = new Put(Bytes.toBytes(key.toString()));
    //f1作为列族,c1作为列标识符,sum作为value
    put.add(Bytes.toBytes("f1"), Bytes.toBytes("c1"), Bytes.toBytes(sum));
    
    context.write(NullWritable.get(), put);
   } catch (IOException e) {
    e.printStackTrace();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 public int run(String[] args) throws Exception {
  Configuration conf = this.getConf();
  String OUTPUT_TABLE = "hbase.mapred.outputtable";
  conf.set(OUTPUT_TABLE, "wordcount");
  
  //以下语句直接赋值会报错!!!在编译的时候就报错!!!
  //conf.set(TableOutputFormat.OUTPUT_TABLE, "wordcount");
  //在hbase创建表,列族为f1
  HbaseApi.create("wordcount", "f1");
  
  Job job = new Job(conf);
  job.setJarByClass(WordCount.class);
  job.setJobName(WordCount.class.getSimpleName());
  
  String path = "hdfs://grid131:9000/stu.txt";
  FileInputFormat.addInputPath(job, new Path(path));
  
  job.setInputFormatClass(TextInputFormat.class);
  job.setOutputFormatClass(TableOutputFormat.class);
  
  job.setMapperClass(Map.class);
  //job.setCombinerClass(Reduce.class);
  job.setReducerClass(Reduce.class);
  
  job.setMapOutputKeyClass(Text.class);
  job.setMapOutputValueClass(IntWritable.class);
  
  job.waitForCompletion(true);
  
  return job.isSuccessful()?0:1;
 }
 
 public static void main(String[] args) throws Exception {  
  int exit = ToolRunner.run(new WordCount(), args);
  System.exit(exit);
 }
 
}

转载于:https://my.oschina.net/sniperLi/blog/350469

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值