共計 5528 個字符,預計需要花費 14 分鐘才能閱讀完成。
本篇文章為大家展示了怎樣解析 hbase ORM simplehbase v0.7,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
### v0.7 新增功能:
支持查詢時主記錄和關聯的 RowKey 同時返回。
由于 github 不穩定,使用說明附在文檔后面。
## simplehbase 簡介
simplehbase 是 java 和 hbase 之間的輕量級中間件。
主要包含以下功能。
* 數據類型映射:java 類型和 hbase 的 bytes 之間的數據轉換。
* 簡單操作封裝:封裝了 hbase 的 put,get,scan 等操作為簡單的 java 操作方式。
* hbase query 封裝:封裝了 hbase 的 filter,可以使用 sql-like 的方式操作 hbase。
* 動態 query 封裝:類似于 myibatis,可以使用 xml 配置動態語句查詢 hbase。
* insert,update 支持: 建立在 hbase 的 checkAndPut 之上。
* hbase 多版本支持:提供接口可以對 hbase 多版本數據進行查詢, 映射。
* hbase 原生接口支持。
## simplehbase 示例(SampleMain.java)
### 使用 simplehbaseclient 操作 hbase
SimpleHbaseClient simpleHbaseClient = getSimpleHbaseClient();
//insert one record.
Person one = new Person();
one.setId(1);
one.setName(allen
one.setAge(30);
one.setGender(Gender.MALE);
simpleHbaseClient.putObject(new PersonRowKey(1), one);
//insert another record.
Person two = new Person();
two.setId(2);
two.setName(dan
two.setAge(31);
two.setGender(Gender.FEMALE);
simpleHbaseClient.putObject(new PersonRowKey(2), two);
//search by row key.
Person result = simpleHbaseClient.findObject(new PersonRowKey(1),
Person.class);
log.info(result);
//search by range.
List Person resultList = simpleHbaseClient.findObjectList(
new PersonRowKey(1), new PersonRowKey(3), Person.class);
log.info(resultList);
//HQL query.
Map String, Object para = new HashMap String, Object
para.put(id , 1);
resultList = simpleHbaseClient.findObjectList(new PersonRowKey(1),
new PersonRowKey(3), Person.class, queryById , para);
log.info(resultList);
//dynamic HQL.
para.put(name , allen
para.put(age , 0);
resultList = simpleHbaseClient.findObjectList(new PersonRowKey(1),
new PersonRowKey(3), Person.class, queryByNameAndAge , para);
log.info(resultList);
//batch delete.
simpleHbaseClient.deleteObjectList(new PersonRowKey(0),
new PersonRowKey(100), Person.class);
### 初始化 simplehbase
HBaseDataSource hbaseDataSource = new HBaseDataSource();
List Resource hbaseConfigResources = new ArrayList Resource
//If run on hbase cluster, modify the following config files.
//If run on hbase stand alone mode, comment out the following config files.
hbaseConfigResources.add(new CachedFileSystemResource(
sample\\hbase_site ));
hbaseConfigResources
.add(new CachedFileSystemResource( sample\\zk_conf));
hbaseDataSource.setHbaseConfigResources(hbaseConfigResources);
hbaseDataSource.init();
HBaseTableConfig hbaseTableConfig = new HBaseTableConfig();
//simplehbase config file.
hbaseTableConfig.setConfigResource(new CachedFileSystemResource(
sample\\myRecord.xml ));
hbaseTableConfig.init();
SimpleHbaseClient tClient = new SimpleHbaseClientImpl();
tClient.setHbaseDataSource(hbaseDataSource);
tClient.setHbaseTableConfig(hbaseTableConfig);
return tClient;
### simplehbase 配置 xml
包含 htable 的配置和 2 個動態查詢的配置
SimpleHbase
HBaseTableSchema tableName= MyRecordV05 defaultFamily= MyRecordFamily
HBaseColumnSchema qualifier= id typeName= int /
HBaseColumnSchema qualifier= name typeName= string /
HBaseColumnSchema qualifier= date typeName= date /
HBaseColumnSchema qualifier= gender typeName= allen.sample.Gender /
HBaseColumnSchema qualifier= age typeName= int /
/HBaseTableSchema
statements
statement id= queryByNameAndAge
select where id greaterequal #id#
isPropertyAvailable prepend= and property= name
name equal #name#
/isPropertyAvailable
isPropertyAvailable prepend= and property= age
age greater #age#
/isPropertyAvailable
/statement
statement id= queryById
select where id equal #id#
/statement
/statements
/SimpleHbase
### 定義 DO 對象
@HBaseTable(defaultFamily = MyRecordFamily)
public class Person {
@HBaseColumn(qualifier = id)
private int id;
@HBaseColumn(qualifier = name)
private String name;
@HBaseColumn(qualifier = date)
private Date date;
@HBaseColumn(qualifier = gender)
private Gender gender;
@HBaseColumn(qualifier = age)
private int age;
}
### 定義該 DO 對象對應的 rowkey
public class PersonRowKey implements RowKey {
private int row;
public PersonRowKey(int row) {
this.row = row;
}
@Override
public byte[] toBytes() {
return Bytes.toBytes(row);
}
}
##simphbase simplehbaseviewer 使用說明
### simplehbase/simplehbaseviewer 版本
0.5.1 / 0.6 / 0.7
### jdk
jdk/jre 1.6
### maven
maven2
### 代碼下載
最新 simplehbase 代碼下載。
https://github.com/zhang-xzhi/simplehbase
右下角的 download zip。
帶版本的 simplehbase 版本下載。
https://github.com/zhang-xzhi/simplehbase/releases
最新 simplehbaseviewer 代碼下載。
https://github.com/zhang-xzhi/simplehbaseviewer
右下角的 download zip。
帶版本的 simplehbaseviewer 版本下載。
https://github.com/zhang-xzhi/simplehbaseviewer/releases
### Simplehbase 本地驗證
代碼下載后,mvn eclipse:eclipse 后導入 eclipse。
運行 simplehbase 的 test。(Junit)
目前 simplehbase 默認的測試環境為
hbase.zookeeper.quorum=hbdev-1.alipay.net,hbdev-2.alipay.net,hbdev-3.alipay.net,hbdev-4.alipay.net,hbdev-5.alipay.net
hbase.zookeeper.property.clientPort=2181
zookeeper.znode.parent=/hbase-94
* 1 若無法連接,修改 test/zk_conf 文件(集成測試使用,修改 sample/zk_conf 文件(樣例程序使用)。
* 2 建測試表。運行 CreateTestTable, 新建 MyRecordV05 表。
* 3 建表成功后,重新運行 test,后續運行,不需要重新建立測試表。
* 4 新增 htable 的配置,請參考既有表的配置。
### Simplehbaseviewer 本地驗證
安裝 simplehbase 到本地倉庫。
在 simplehbase 項目中,mvn install。
simplehbaseviewer 代碼下載后,mvn eclipse:eclipse 后導入 eclipse。
運行 Main。
訪問 http://localhost:4040/hbaseviewer/
看 simplehbaseview 是否啟動正常。
目前 simplehbaseviewer 默認的測試環境為
hbase.zookeeper.quorum=hbdev-1.alipay.net,hbdev-2.alipay.net,hbdev-3.alipay.net,hbdev-4.alipay.net,hbdev-5.alipay.net
hbase.zookeeper.property.clientPort=2181
zookeeper.znode.parent=/hbase-94
* 1 若無法連接,修改 config/zk_conf 文件。
* 2 建測試表。運行 CreateTestTable, 新建 MyRecordV05 表。
* 3 建表成功后,重新運行 Main。
### Simplehbase jar 包依賴
pom 依賴,請參考 simplehbase 的 pom 文件。
其中,hadoop 和 hbase 可以修改為目前集團 hbase 使用的版本。
Simplehbase 開發測試過程中使用的 hbase 版本為 0.94.0。
理論上,hbase0.92 也可以使用,但是未經測試,可以跑 test 進行測試。
### Simplehbaseclient 配置
SimpleHbaseClient 為 simplehbase 的核心接口。
Java 方式配置可以參考 simplehbase 的 SampleMain。
Spring 方式配置可以參考 simplehbaseviewer 的
\hbaseviewer\WEB-INF\spring\simplehbase.xml
上述內容就是怎樣解析 hbase ORM simplehbase v0.7,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。