博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase MapReduce实例分析
阅读量:6229 次
发布时间:2019-06-21

本文共 4167 字,大约阅读时间需要 13 分钟。

hot3.png

  跟Hadoop的无缝集成使得使用MapReduce对HBase的数据进行分布式计算非常方便,本文将介绍HBase下 MapReduce开发要点。很好理解本文前提是你对Hadoop MapReduce有一定的了解,如果你是初次接触Hadoop MapReduce编程,可以参考  这篇文章来建立基本概念。

一、Java代码

package hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;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.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.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;public class WordCountHBase {    public static class Map extends            Mapper
 {        private IntWritable i = new IntWritable(1);        public void map(LongWritable key, Text value, Context context)                throws IOException, InterruptedException {            String s[] = value.toString().trim().split(" ");            // 将输入的每行以空格分开            for (String m : s) {                context.write(new Text(m), i);            }        }    }    public static class Reduce extends            TableReducer
 {        public void reduce(Text key, Iterable
 values,                Context context) throws IOException, InterruptedException {            int sum = 0;            for (IntWritable i : values) {                sum += i.get();            }            Put put = new Put(Bytes.toBytes(key.toString()));            // Put实例化,每一个词存一行            put.add(Bytes.toBytes("content"), Bytes.toBytes("count"),                    Bytes.toBytes(String.valueOf(sum)));            // 列族为content,列为count,列值为数目            context.write(NullWritable.get(), put);        }    }    public static void createHBaseTable(String tableName) throws IOException {        HTableDescriptor htd = new HTableDescriptor(tableName);        HColumnDescriptor col = new HColumnDescriptor("content");        htd.addFamily(col);        Configuration conf = HBaseConfiguration.create();        conf.set("hbase.zookeeper.quorum", "libin2");        HBaseAdmin admin = new HBaseAdmin(conf);        if (admin.tableExists(tableName)) {            System.out.println("table exists, trying to recreate table......");            admin.disableTable(tableName);            admin.deleteTable(tableName);        }        System.out.println("create new table:" + tableName);        admin.createTable(htd);    }    public static void main(String[] args) throws IOException,            InterruptedException, ClassNotFoundException {        String tableName = "WordCount";        Configuration conf = new Configuration();        conf.set(TableOutputFormat.OUTPUT_TABLE, tableName);        createHBaseTable(tableName);        String input = args[0];        Job job = new Job(conf, "WordCount table with " + input);        job.setJarByClass(WordCountHBase.class);        job.setNumReduceTasks(3);        job.setMapperClass(Map.class);        job.setReducerClass(Reduce.class);        job.setMapOutputKeyClass(Text.class);        job.setMapOutputValueClass(IntWritable.class);        job.setInputFormatClass(TextInputFormat.class);        job.setOutputFormatClass(TableOutputFormat.class);        FileInputFormat.addInputPath(job, new Path(input));        System.exit(job.waitForCompletion(true) ? 0 : 1);    }}

二、把java代码打成jar包

234910_7auH_1269935.png

 

如果同时用到了两个jar包,需要在两个jar包之间加一个":"分隔符。234942_HKL5_1269935.png

三、运行程序235018_6Yjk_1269935.png

运行WordCountHBase.jar可能会报错:java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HTableDescriptor

解决方法(把hbase的核心jar包和hbase自带的Zookeeperjar包拷贝到hadoop的安装目录\lib下,然后重启服务):235056_nGXN_1269935.png

 

然后再次执行

001349_hvza_1269935.png

 

235147_Ja6U_1269935.png

235241_mfOu_1269935.png

235322_4nr7_1269935.png

 

四、查看HBase表中的数据

235402_Ow0s_1269935.png

   

       如果表中有保存好的MapReduce处理后的数据,说明成功!本文通过实例分析演示了使用MapReduce分析HBase的数据,需要注意的这只是一种常规的方式(分析表中的数据存到另外的表中),实际上不局限于此,不过其他方式跟此类似。

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/1269935/blog/358235

你可能感兴趣的文章
JavaWEB开发14——ajax
查看>>
Vue2.0 + ElementUI 手写权限管理系统后台模板(二)——权限管理
查看>>
利用AudioContext来实现网易云音乐的鲸鱼音效
查看>>
简述原型链是什么,有什么用处?若想访问一个对象的原型,应该使用什么方法?...
查看>>
HBuilder开发WAP2APP增加扫一扫功能
查看>>
程序员选电脑,你会不会买Mac?
查看>>
JS 里的数据类型转换
查看>>
python大佬养成计划----正则表达式
查看>>
JS原型与原型链总结篇
查看>>
mybatis缓存机制与陷阱
查看>>
【CSS】CSS常用技巧
查看>>
IO多路复用(二) -- select、poll、epoll实现TCP反射程序
查看>>
ECMAScript6(11):Set 与 Map
查看>>
Spring
查看>>
redis系列:通过队列案例学习list命令
查看>>
关于如何把项目做得更好的一次思考
查看>>
webpack4 配置解析和实战
查看>>
Mac OS 使用iTerm2实现服务器间文件的上传下载
查看>>
react学习笔记二----nodejs服务器搭建及异常处理
查看>>
PHP 操作 Beanstalkd 方法及参数注释
查看>>