日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《HBase权威指南》读书笔记4

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《HBase权威指南》读书笔记4 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第四章 客戶端API:高級特性

4.1過濾器

  • 所有過濾器都在服務器端生效,叫 謂詞下推(predicate push down)
  • 繼承自compareFilter的Filter比較特殊,多了一個 compare() 方法
HBase內置比較器comparator 比較器描述
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只要有一個通過就返回
而且過濾器執行的順序就是你傳入list的順序

自定義過濾器

可以實現Filter接口或者繼承?FilterBase

計數器

計數器其實也是一個列,只是通過 incr 和 get_incr ?可以存入數值型和獲取成數值型顯示,否則都是二進制,無法實現+1遞增

單計數器自增

table.incrementColumnValue()

多計數器自增

Increment i = new Increment(); i.addColumn(....);

協處理器

  • 協處理器就是一個小型的MapReduce框架,增加在服務端的計算功能,讓返回的結果集更小
  • 用戶需要自己編寫java類并打包成jar來實現協處理器
  • 與過濾器不同的是,協處理器可以被動態加載
  • HBase的授權認證和審查就是基于協處理器的
協處理器分為兩大類 observer 和 endpoint

observer

跟觸發器類似:回調函數(hook)在某些特定的事件被觸發的時候執行 協處理器提供了以下接口
  • RegionObserver 處理數據修改事件
  • MasterObserver 管理DDL級的操作
  • WALObserver 提供控制WAL的鉤子函數

endpoint

類似存儲過程。endpoint 跟 observer 可以結合使用
所有協處理器都可以被鏈接起來使用

Coprocessor接口

所有協處理器的共同接口。 有兩個枚舉類 Priority 和 State
Coprocessor.Priority 值說明
SYSTEM高優先級
USER定義其他的協處理器,按順序執行
協處理器有一個序號,用來定義同一優先級的時候的執行順序,不過總體來說意義不大 CoprocessorEnviroment用來在協處理器的生命周期中保持其狀態,提供了一些有用的方法
  • getHBaseVersion
  • getVersion 獲取Coprocessor接口的版本
  • getInstance() 返回加載的協處理器實例
  • getPriority()
  • getLoadSequence() 獲取序號
  • getTable( tableName) 返回HTable實例
協處理器應該用getTable方法獲取HTable類,這樣更安全,因為這個方法會加一些默認的安全措施,比如,協處理器不可以對一行數據加鎖
Coprecessor.State 值說明
UNINSTALLED最初的狀態,沒有環境,也沒有初始化
INSTALLED實例裝載了它的環境參數
STARTING即將要開始工作,start()方法即將被調用
ACTIVE一旦start()方法被調用,當前狀態就是active
STOPPINGstop()方法被調用之前的狀態
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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。