该文前提为已经搭建好的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. 【转载】Java 集合框架

    http://wangkuiwu.github.io/2012/02/03/collection-03-arraylist/ 网上比较全的Java集合框架教程. 注:transient是Java语言的 ...

  2. 缓冲区溢出基础实践(二)——ROP 与 hijack GOT

    3.ROP ROP 即 Return Oritented Programming ,其主要思想是在栈缓冲区溢出的基础上,通过程序和库函数中已有的小片段(gadgets)构造一组串联的指令序列,形成攻击 ...

  3. 有料面试题之--Object里面的方法

    阿里的面试题里面有个题很奇妙:你知道Object类里面有哪些方法吗? 绝大部分猿类都知道 有hashcode .equals .clone.toString 只有部分人会回答有 wait和notify ...

  4. 自定义ClassLoader

    自定义classloader MapleClassLoader package com.maple; import java.io.*; public class MapleClassLoader e ...

  5. 2251. [2010Beijing Wc]外星联络【后缀数组】

    Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻 找外星人的事业.于是,他每天晚上都爬在屋顶上试图用自己的收音机收听外星 人发来的信 ...

  6. Java基础加强之集合

    集合整体框架图 各集合框架的概述 1. Collection(常用List和Set,不常用Queue和Vector),单元素集合. 2. Map(常用HashMap和TreeMap,不常用HashTa ...

  7. programming-languages学习笔记--第8部分

    programming-languages学习笔记–第8部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...

  8. Linux终端里的记录器

    我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析. 如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好. 但是如果做一些压力测试,产生大量 log ,而且系统内存又比较小(比 ...

  9. Rserve详解,R语言客户端RSclient【转】

    R语言服务器程序 Rserve详解 http://blog.fens.me/r-rserve-server/ Rserve的R语言客户端RSclient https://blog.csdn.net/u ...

  10. jmeter报错之“请在微信客户端打开链接”

    这是一个还没解决的问题,这里纯粹记录自己思考的过程,后续给自己参考. 先说明情景:对微信公众号的一个接口进行调用跑通,后续可能需要压测(是的,仅仅是调通一个接口而已o(╥﹏╥)o) 1.按照我理解的正 ...