该文前提为已经搭建好的HBase集群环境,参见 HBase集群搭建与配置 ,本文主要是用Java编写一个Servlet接口,部署在Tomcat服务器上,用于提供http的接口供其他地方调用,接口中集成了一些简易HBase操作,有需要可以再继续扩展。

软件环境:

IntelliJ IDEA、Hadoop-2.9.2、HBase-1.4.9

Jar包引入

程序所需jar包,基本在HBase的lib目录下都能找到,该文因暂时没使用MapReduce,因此只需如下jar包

在File->Project Structure->Libraries中添加如下jar包

并在Modules中选中站点根目录,Dependencies页签,将lib加入项目

我直接继承的HttpServlet,重构了doGet与doPost函数,也可以直接继承Servlet自己来实现细节,Servlet创建方法请参照网上其他教程,这里自己封装了JsonResult,接口返回均使用json格式,实现了4种接口,具体如下

基础设施

这里创建了几个基础文件:hdfs.properties、HBaseProperties、HBaseHelper具体信息如下

hdfs.properties配置文件用于配置HBase的连接参数

HBaseProperties类用于封装的获取配置文件的代理,获取配置信息,并返回map值

HBaseHelper封装的是HBase具体的操作,其中configuration是配置信息,从配置文件获取后写入,然后创建connection连接

还有一点需要注意的是想运行并连接上集群,需要在部署Tomcat的服务器上配置环境变量HADOOP_HOME,指向hadoop的根目录,并将winutils.exe等相关文件拷贝到hadoop中bin目录下,具体文件如下

以上文件可以参考github中的开源代码自己生成所需版本 https://github.com/steveloughran/winutils

HBase创建表

这里参数tbName为要创建的表名,familylist为列簇的字符串数组

过程为判断表是否存在,不存在则遍历familylist,获取列簇名称添加到表描述中,最后创建改表

插入数据

插入数据一共写了3个

1.插入某行,某列簇,某列的数据,可以用于修改或者特殊插入,代码如下

参数分别是tbName表名、rowkey行名、family列簇名、col列名、value具体的值

2.插入一行数据,代码如下

其中familymap是一个hashmap,key为列簇,value是一个键值对的map,这个map为该列簇下列名与数据的键值对

其中函数BuildPut构建put函数封装如下

3.插入多行数据,也是使用最多的函数

其中rows是hashmap类型,key为rowkey,value为函数2中的familymap,遍历所有rowkey,通过BuildPut构建出来,加入table中,需要注意的是rowkey的设计,需要注意防止数据倾斜。业务上这里因为有大量设备周期性发送数据,因此我用的设备编号hash后,取前8位加上时间戳来作为rowkey

通过rowkey查询指定列

这里传入参数tbName为表名,rowkeys为rowkey的字符串数组,通过遍历rowkeys,生成Get并加入table查询,最后查询结果Result通过构建函数BuildSourceMap构建为之前那种map格式,最后通过json转换返回给调用接口

其中BuildSourceMap构建函数如下

将获取到的数据遍历,然后逐步加入列的map、列簇的map、最终的map并返回

通过Scan模糊匹配查询

一共封装了2种模糊匹配,一种是带了列簇名称,一种是未带,没有带列簇的将会遍历所有列簇,并加入过滤条件中

1.带了列簇信息,其中list过滤条件中格式规定如下

string="{0},{1},{2},{3}"

其中0为列簇名称,1为列名称,2为匹配操作符,3为匹配的值

查询到的结果通过函数BuildSourceMap构建为map返回,操作符匹配CompareOp的函数如下

2.不带列簇信息,其中list过滤条件中格式规定如下

string="{0},{1},{2}"

其中0为列名称,1为匹配操作符,2为匹配的值

至此HBase的一些常用操作就封装完毕了,只需要打包发布部署上就可以使用了,后续还会写一篇C#封装的用于提供C#后端调用,而底层对接该接口的类库,这样就可以串起来用了

大数据中HBase的Java接口封装的更多相关文章

  1. 大数据中HBase集群搭建与配置

    hbase是分布式列式存储数据库,前提条件是需要搭建hadoop集群,需要Zookeeper集群提供znode锁机制,hadoop集群已经搭建,参考 Hadoop集群搭建 ,该文主要介绍Zookeep ...

  2. 大数据之HBase

    大数据之HBase数据插入优化之多线程并行插入实测案例 一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于 ...

  3. Apache Hudi在医疗大数据中的应用

    本篇文章主要介绍Hudi在医疗大数据中的应用,主要分为5个部分进行介绍:1. 建设背景,2. 为什么选择Hudi,3. Hudi数据同步,4. 存储类型选择及查询优化,5. 未来发展与思考. 1. 建 ...

  4. 学大数据一定要会Java开发吗?

    Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言.Java语言功能强大和简单易用,不仅吸收了C++语言的各种优点还摒弃了C++里难以理解的多继承.指针等概念. J ...

  5. 基于简单sql语句的sql解析原理及在大数据中的应用

    基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1 ...

  6. NoSQL在大数据中的应用

    一.序言 NoSQL是Not Only SQL的缩写,而不是Not SQL,指的是非关系型的数据库,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等.相比传统数据库 ...

  7. 大数据开发--Hbase协处理器案例

    大数据开发--Hbase协处理器案例 1. 需求描述 在社交网站,社交APP上会存储有大量的用户数据以及用户之间的关系数据,比如A用户的好友列表会展示出他所有的好友,现有一张Hbase表,存储就是当前 ...

  8. 大数据查询——HBase读写设计与实践

    导语:本文介绍的项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的 ...

  9. 大数据学习——Hbase

    1. Hbase基础 1.1 hbase数据库介绍 1.简介 hbase是bigtable的开源java版本.是建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写nosql的数据库系统 ...

随机推荐

  1. tomcat-7.0.30安装及配置

    使用说明: 一.1.下载jdk(http://java.sun.com/javase/downloads/index.jsp),2.安装jdk-6u14-windows-i586.exe 3.配置环境 ...

  2. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  3. 面对对象程序设计_task2_C++视频教程

    lessons about C++ 1月份的事情不该留到2月份来做,这几天看了几个地方的C++视频教程,不习惯于云课堂的话多等等,最终还是选择了慕课网上面的资源,也安下心来看了一些内容,下面附上课程详 ...

  4. 面向对象程序设计_tesk1_寒假伊始

    大一下学期的自我目标(要求包含对大一上学期的总结.对面向对象课程完成后学习到的能力的预期,对面向对象课程的期望.对编程和专业能力的愿景规划) 在大学的第一个学期,相信很多人都是在得过且过度过,我也不例 ...

  5. git问题整理

    //1.git常用命令,git的branch 2.git的原理 //4.怎么同步到本地仓库,怎么传到远程仓库 //3.git中 rebase 和 merge的区别 5.git的使用,讲一下? //4. ...

  6. python基础整理7——爬虫——爬虫开发工具

    HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求. Fiddler启动的时候,默认IE的代理设为了127.0.0.1:8888,而其他浏 ...

  7. Docker实战(七)之为镜像添加SSH服务

    1.基于commit命令创建 Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像.命令格式为docker commit CONTAINER [REPOS ...

  8. 《关于ES6的学习》

    var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如 ...

  9. java学习笔记-JavaWeb篇三

    63 JSTL_表达式操作64 JSTL_流程控制操作 65 JSTL_迭代操作 66 JSTL_URL操作67 JSTL_改写MVC案例68 Filter概述 69 创建HttpFilter 70 ...

  10. Android的JNI调用(三)

    注册JNI函数 注册之意就是将Java层的native函数与JNI层对应的实现函数关联起来,这样在调用Java层的native函数时,就能顺利转到JNI层对应的函数执行. (1)静态注册 根据函数名来 ...