A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 不二晨 金牌黑马   /  2018-11-26 09:18  /  1279 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

准备工作如下:

一.两张hbase表——fruit(有数据)和fruitresult(无数据),我们将使用mapreduce将hbase中的frult以可自定义的方式复制到fruitresult中



二.创建一个hbase工程,导入对应jar包



代码如下:

map端:

public class FruitMapper extends TableMapper<ImmutableBytesWritable, Put> {
        @Override
        protected void map(
                        ImmutableBytesWritable key,
                        Result value,
                        Mapper<ImmutableBytesWritable, Result, ImmutableBytesWritable, Put>.Context context)
                        throws IOException, InterruptedException {
                Put put = new Put(key.get());
                Cell[] cells = value.rawCells();
                for (Cell cell : cells) {
                        if ("name".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))) {
                                put.add(cell);
                        } else if ("color".equals(Bytes.toString(CellUtil
                                        .cloneQualifier(cell)))) {
                                put.add(cell);
                        }
                }
                context.write(key, put);
        }
}
reduce端如下:

public class FruitReducer extends
                TableReducer<ImmutableBytesWritable, Put, NullWritable> {
        @Override
        protected void reduce(
                        ImmutableBytesWritable key,
                        Iterable<Put> values,
                        Reducer<ImmutableBytesWritable, Put, NullWritable, Mutation>.Context context)
                        throws IOException, InterruptedException {
                // TODO Auto-generated method stub
                for (Put value : values) {
                        context.write(NullWritable.get(), value);
                }
        }
}
drive端:

public class FruitDriver extends Configuration implements Tool {
        Configuration configuration = null;

        public static void main(String[] args) throws Exception {
                Configuration conf = HBaseConfiguration.create();
                int tool = ToolRunner.run(conf, new FruitDriver(), args);
        }

        @Override
        public void setConf(Configuration conf) {
                // TODO Auto-generated method stub
                this.configuration = conf;
        }

        @Override
        public Configuration getConf() {
                // TODO Auto-generated method stub
                return null;
        }

        @Override
        public int run(String[] args) throws Exception {
                Job job = Job.getInstance(configuration);
                // job.setMapperClass(FruitMapper.class);
                // job.setReducerClass(FruitReducer.class);
                job.setJarByClass(FruitDriver.class);
                Scan scan = new Scan();
                TableMapReduceUtil.initTableMapperJob("fruit", scan, FruitMapper.class,
                                ImmutableBytesWritable.class, Put.class, job);
                TableMapReduceUtil.initTableReducerJob("fruitresult",
                                FruitReducer.class, job);
                System.out.println();
                return job.waitForCompletion(true) ? 0 : 1;
        }
}
运行结果如下:


---------------------
【转载】
作者:myllxy
原文:https://blog.csdn.net/qq_39327985/article/details/84495261


3 个回复

倒序浏览
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马