zoukankan      html  css  js  c++  java
  • 大数据中HBase的Java接口封装

    该文前提为已经搭建好的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包

    image

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

    image

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

    基础设施

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

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

    image

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

    image

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

    image

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

    image

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

    HBase创建表

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

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

    image

    插入数据

    插入数据一共写了3个

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

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

    image

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

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

    image

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

    image

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

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

    image

    通过rowkey查询指定列

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

    image

    其中BuildSourceMap构建函数如下

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

    image

    通过Scan模糊匹配查询

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

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

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

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

    image

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

    image

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

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

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

    image

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

  • 相关阅读:
    实习差不多一个月了
    多一个角度,多一分收获
    走出第一步
    .net中枚举enum的复习与实例
    瞧瞧UC浏览器对CSS样式的“关怀”
    关于cookie(基础)
    用ajax提交数据到ashx用JSON.stringify格式化参数后在服务器端取不到值?[转载至:http://q.cnblogs.com/q/34266/]
    [转载] SQL进行排序、分组、统计的10个新技巧
    css样式解决圆角等多种难解决的问题 (转载至:Lanny☆兰东才)
    让人想不通的突然button事件失灵了?(小心页面form表单嵌套)
  • 原文地址:https://www.cnblogs.com/rqx-20181108/p/10303820.html
Copyright © 2011-2022 走看看