大數據中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#后端調用,而底層對接該接口的類庫,這樣就可以串起來用了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM