HBase Coprocessor程式設計案例

2021-08-05 22:11:08 字數 2370 閱讀 6265

1. 啟用協處理器aggregation(enable coprocessor aggregation)

兩種方法:

(1) 啟動全域性aggregation,能夠操作所用表上的資料。通過修改hbase-site.xml檔案實現,

<

property

>

<

name

>hbase.coprocessor.user.region.classes

name

>

<

value

>org.apache.hadoop.hbase.coprocessor.aggregateimplementation

value

>

property

>

(2)啟動表aggregation,只對特定的表生效。通過hbase shell來實現:

2.1 disable 指定表:hbase> disable 'mytable'

2.2 新增aggregation hbase> alter 'mytable', method =>'table_att','coprocessor'=>'|org.apache.hadoop.hbase.coprocessor.aggregateimplementation||'

2.3 重啟指定表 hbase> enable 'mytable'

2. 統計行數**(code snippet)

public classmyaggregationclient 

}

3.案例,建立二級索引

hbase coprocessor 其中的乙個作用是使用observer建立二級索引。

案例:要查詢指定店鋪指定客戶購買的訂單,首先有一張訂單詳情表,它以被處理後的訂單id作為rowkey;

其次有一張以客戶nick為rowkey的索引表,表結構如下:

rowkey                       family

dp_id+buy_nick1        tid1:null tid2:null 

dp_id+buy_nick2        tid3:null

該錶可以通過coprocessor來構建,例項**:

public classtestcoprocessorextendsbaseregionobserver 

table.close();

}}

即繼承baseregionobserver類,實現preput方法,在插入訂單詳情表之前,向索引表插入索引資料。

4.索引表的使用

現在索引表get索引表,獲取tids,然後根據tids查詢訂單詳情表。

當有多個查詢條件(多張索引表),根據邏輯運算子(and, or)確定tids。

5.使用時注意事項

(1) 

索引表是一張普通的

hbase

表,為安全考慮需要開啟

hlog

記錄日誌。

(2) 

索引表的

rowkey

最好是不可變數,避免索引表中產生大量的髒資料。

(3) 

如上例子,

column

是橫向擴充套件的(寬表),

rowkey

設計除了要考慮

region

均衡,也要考慮

column

數量,即表不要太寬。建議不超過

3位數。

(4) 

如上**,乙個

put操作其實是先後向兩張表

put資料,為保證一致性,需要考慮異常處理,建議異常時重試。

6. 效率情況

put操作效率不高,如上**,每插入一條資料需要建立乙個新的索引表連線(可以使用

htablepool

優化),向索引表插入資料。即耗時是雙倍的,對

hbase

的集群的壓力也是雙倍的。當索引表有多個時,壓力會更大。

查詢效率比

filter

高,毫秒級別,因為都是

rowkey

的查詢。

如上是估計的效率情況,需要根據實際業務場景和集群情況而定,最好做預先測試。

7. coprocessor二級索引方法優劣

優點:

在put壓力不大,索引region均衡的情況下,查詢很快。

缺點:業務性比較強,若有多個欄位的查詢,需要建立多張索引表,需要保證多張表的資料一致性,且在

hbase

的儲存和記憶體上都會有更高的要求。

SpringData MongoDB 入門案例

建立工程,引入座標 org.springframework.data spring data mongodb 2.2.1.release junit junit 4.12 org.springframework spring test 5.1.6.release 建立配置檔案 建立實體類 使用 do...

SQL IDENTITY INSERT作用案例詳解

一般情況下,當資料表中,莫一列被設定成了標識列之後,是無法向標識列中手動的去插入標識列的顯示值。但是,可以通過設定set identity insert屬性來實現對標識列中顯示值的手動插入。寫法 注意 identity insert的開啟on和關閉off是成對出現的,所以,在執行完手動插入操作之後,...

vue專案中字型檔案過大 壓縮字型檔案

目前做的乙個vue專案當中引入了外部的字型檔案,打包之後測試發現載入過慢,需等待較長時間才能看到效果,特此記錄在vue專案中壓縮字型的操作.字蛛是乙個中文字型壓縮器,通過分析本地 css 與 html 檔案獲取 webfont 中沒有使用的字元,並將這些字元資料從字型中刪除以實現壓縮,同時生成跨瀏覽...