《HBase权威指南》读书笔记4
生活随笔
收集整理的這篇文章主要介紹了
《HBase权威指南》读书笔记4
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第四章 客戶端API:高級特性
4.1過濾器
- 所有過濾器都在服務器端生效,叫 謂詞下推(predicate push down)
- 繼承自compareFilter的Filter比較特殊,多了一個 compare() 方法
| BinaryComparator | 使用Bytes.compareTo() 比較當前值與閥值 |
| BinaryPrefixComparator | 與上面的相似,使用Bytes.compareTo()進行匹配,但是是從左端開始前綴匹配 |
| NullComparator | 不做匹配,只判斷當前值是不是Null |
| BitComparator | 通過BitwiseOp類提供的按位與(AND)、或(OR)、異或(XOR)操作執行位數級比較 |
| RegexStringComparator | 根據正則表達式匹配 |
| SubstringComparator | 通過contains()操作匹配字符串 |
后面的三種比較器?BitComparator,?RegexStringComparator,?SubstringComparator 只能與 EQUAL, NOT_EQUAL 運算符搭配使用。因為這些比較器匹配完只返回0或者1
行過濾器(row filter)
行過濾器用于過濾行鍵(rowkey) 思考:可以用行過濾器來做一個簡易的查詢客戶端(類似HUE)單列值過濾器(SingleColumnValueFilter)
指定某列對其進行值比較(使用頻率最高的filter) setFilterIfMissing(true)可以將不存在該列的行過濾掉,否則如果該列不存在也被放到查詢結果中了單列排除過濾器(SingleColumnValueExcludeFilter)
繼承自 SingleColumnValueFilter 唯一的區別是查詢結果不包含查詢列前綴過濾器(PrefixFilter)
所有與前綴匹配的行都會返回到客戶端,可以看做是某種特殊的行過濾器,但是速度更快分頁過濾器(PageFilter)
可以設定pagesize,但是由于是分布式系統,所以可能返回的比需要的多。 客戶端代碼記錄本次掃描的最后一行,下次獲取記錄的時候可以把這個行設定為本次掃描的起始行,并同時保留相同的過濾器屬性,然后依次迭代。(記住最后一行這個動作要自己實現,具體可見實例代碼,在此就不貼上來了) 技巧:因為起始行會被包含在本次掃描中,這樣會造成,改行不僅在上次循環中出現,在本次循環中也要出現,所以起始行要加一個0,這樣這行就不會出現在本次掃描中首次行鍵過濾器(FirstKeyOnlyFilter)
只比較一行中的第一列,看起來沒什么用,不過可以做 行數統計用FilterList
可以組合多個Filter| 操作 | 描述 |
| MUST_PASS_ALL | 全部通過才返回 |
| MUST_PASS_ONE | 只要有一個通過就返回 |
自定義過濾器
可以實現Filter接口或者繼承?FilterBase計數器
計數器其實也是一個列,只是通過 incr 和 get_incr ?可以存入數值型和獲取成數值型顯示,否則都是二進制,無法實現+1遞增單計數器自增
table.incrementColumnValue()多計數器自增
Increment i = new Increment(); i.addColumn(....);協處理器
- 協處理器就是一個小型的MapReduce框架,增加在服務端的計算功能,讓返回的結果集更小
- 用戶需要自己編寫java類并打包成jar來實現協處理器
- 與過濾器不同的是,協處理器可以被動態加載
- HBase的授權認證和審查就是基于協處理器的
observer
跟觸發器類似:回調函數(hook)在某些特定的事件被觸發的時候執行 協處理器提供了以下接口- RegionObserver 處理數據修改事件
- MasterObserver 管理DDL級的操作
- WALObserver 提供控制WAL的鉤子函數
endpoint
類似存儲過程。endpoint 跟 observer 可以結合使用所有協處理器都可以被鏈接起來使用
Coprocessor接口
所有協處理器的共同接口。 有兩個枚舉類 Priority 和 StateCoprocessor.Priority
| SYSTEM | 高優先級 |
| USER | 定義其他的協處理器,按順序執行 |
- getHBaseVersion
- getVersion 獲取Coprocessor接口的版本
- getInstance() 返回加載的協處理器實例
- getPriority()
- getLoadSequence() 獲取序號
- getTable( tableName) 返回HTable實例
Coprecessor.State
| UNINSTALLED | 最初的狀態,沒有環境,也沒有初始化 |
| INSTALLED | 實例裝載了它的環境參數 |
| STARTING | 即將要開始工作,start()方法即將被調用 |
| ACTIVE | 一旦start()方法被調用,當前狀態就是active |
| STOPPING | stop()方法被調用之前的狀態 |
| STOPPED | 一旦stop()方法將控制權交給框架,狀態為stopped |
CoprocessorHost 類,維護所有協處理器和他們專用的環境
當region被打開的時候,協處理器會被加載 注意:用戶不能指定那張表或者哪個region會被加載 如果用表描述符中加載就可以指定表格
HTablePool
相當于傳統數據庫的連接池,可以不斷的復用這個實例 使用HTablePool來獲取HTable 實例 Configuration conf = HBaseConfiguration.create(); HTablePool pool = new HTablePool(conf,5);HTableInterface[] tables = new HTableInterface[10]; for(int n = 0; n<10; n++){tables[n] = pool.getTable("testtable"); }如果用戶要顯示的使用某個連接 Configuration newConfig = new Configuration(originalConf); HConnection connection = HConnectionManager.getConnection(newConfig); //.......to something HConnectionManager.deleteConnection(newConfig, true);總結
以上是生活随笔為你收集整理的《HBase权威指南》读书笔记4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC请求流程
- 下一篇: NYOJ题目 263 精挑细选