MR写HBase

hbase(main):001:0> split 'stu','1501000100'
0 row(s) in 0.2230 seconds

hbase(main):002:0> split 'stu','1501000200'
0 row(s) in 0.0330 seconds

hbase(main):003:0> split 'stu','1501000300'
0 row(s) in 0.0280 seconds
package com.shujia;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Mutation;
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.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 java.io.IOException;

//从HBase的stu表中读取数据,统计每个班级的性别人数,最后将数据写回HBase
public class Demo06MRReadAndWriteHBase {
    //Map端
    public static class ReadHBase extends TableMapper<Text, IntWritable>{
        @Override
        protected void map(ImmutableBytesWritable key, Result value, Mapper<ImmutableBytesWritable, Result, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            String clazz = Bytes.toString(value.getValue("info".getBytes(), "clazz".getBytes()));
            String gender = Bytes.toString(value.getValue("info".getBytes(), "gender".getBytes()));

            context.write(new Text(clazz+","+gender),new IntWritable(1));
        }
    }

    //Reduce端
    public static class WriteHBase extends TableReducer<Text,IntWritable, NullWritable>{
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, NullWritable, Mutation>.Context context) throws IOException, InterruptedException {
            int cnt=0;
            for (IntWritable value : values) {
                cnt+=value.get();
            }

            Put put = new Put(key.getBytes());
            put.addColumn("cf1".getBytes(),"cnt".getBytes(),(cnt+"").getBytes());

            context.write(NullWritable.get(),put);
        }
    }
    
    //Driver端
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");

        Job job = Job.getInstance(conf);

        //对Map任务进行配置
        TableMapReduceUtil.initTableMapperJob(
                TableName.valueOf("stu")
                , new Scan()
                , ReadHBase.class
                , Text.class
                , IntWritable.class
                , job
        );

        //对Reduce任务进行配置
        TableMapReduceUtil.initTableReducerJob(
                "stu_gender_cnt"
                , WriteHBase.class
                , job
        );

        job.waitForCompletion(true);
    }
    /**
     * create 'stu_gender_cnt','cf1'
     * hadoop jar HBase-1.0-SNAPSHOT-jar-with-dependencies.jar com.shujia.Demo06MRReadAndWriteHBase
     */
}

hbase(main):004:0> create 'stu_gender_cnt','cf1'
0 row(s) in 2.3540 seconds

=> Hbase::Table - stu_gender_cnt
[root@master jars]# hadoop jar HBase-1.0-SNAPSHOT-jar-with-dependencies.jar com.shujia.Demo06MRReadAndWriteHBase

hbase(main):005:0> scan 'stu_gender_cnt'
ROW               COLUMN+CELL                                   
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =41                                           
 \x80\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =31                                           
 \x80\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =44                                           
 \x89\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =50                                           
 \x89\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =38                                           
 \x8C\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =49                                           
 \x8C\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =41                                           
 \x94\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =43                                           
 \x94\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x85 =49                                           
 \xAD\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x85 =55                                           
 \xAD\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x9B =42                                           
 \x9B\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE6\x96\x87\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x9B =39                                           
 \x9B\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =47                                           
 \x80\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =31                                           
 \x80\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =33                                           
 \x89\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xB8 =35                                           
 \x89\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =43                                           
 \x8C\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =36                                           
 \x8C\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =37                                           
 \x94\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE4\xBA =33                                           
 \x94\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x85 =37                                           
 \xAD\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x85 =55                                           
 \xAD\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x9B =41                                           
 \x9B\xE7\x8F\xAD                                               
 ,\xE5\xA5\xB3                                                  
 \xE7\x90\x86\xE7 column=cf1:cnt, timestamp=1650009479540, value
 \xA7\x91\xE5\x9B =50                                           
 \x9B\xE7\x8F\xAD                                               
 ,\xE7\x94\xB7                                                  
24 row(s) in 0.0920 seconds

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值