Observersql
這一類協處理器與觸發器(trigger)相似:回調函數(也被稱做鉤子函數,hook)在一些特定事件發生時被執行。這些事件包括一些用戶產生的事件,也包括服務器端內部自動產生的事件。數據庫
協處理器框架提供的接口以下:apache
Observer提供了一些設計好的回調函數,每一個操做在集羣服務器端均可以被調用。服務器
Endpoint框架
除了事件處理以外還須要將用戶自定義操做添加到服務器端。用戶代碼能夠被部署到管理數據的服務器端,例如,作一些服務器端計算的工做。分佈式
Endpoint經過添加一下遠程過程調用來動態擴展RPC協議。能夠把它們理解爲與RDBMS中相似的存儲過程。函數
客戶端能夠調用這些 Endpoint 協處理器執行一段 Server端代碼,並將Server 端代碼的結果返回給客戶端進一步處理,最多見的用法就是進行彙集操做(謂詞下推)。oop
Endpoint能夠與observer的實現組合起來直接做用於服務器端的狀態。性能
Observer 與 Endpoint總結設計
兩種協處理器的區別:
協處理器加載方式
協處理器的加載方式有兩種:
動態加載方式 (Dynamic Load)
- 動態加載的協處理器稱 之爲 Table Coprocessor
靜態加載
經過修改 hbase-site.xml 這個文件來實現,啓動全局 aggregation,可以操縱全部的表上的數據。
須要添加的代碼:
<property> <name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value> </property>
爲全部 table 加載了一個 cp class,能夠用」,」分割加載多個 class。
但因爲該方法是全局的,因此在實際應用中並非不少,而動態加載用的更多一些。
動態加載
啓用表 aggregation,只對特定的表生效。經過 HBase Shell 來實現。
disable 指定表
```sh hbase> disable 'table名'; ```
```sh hbase> alter 'mytable', METHOD => 'table_att','coprocessor'=> '(1) org.apache.Hadoop.hbase.coprocessor.AggregateImplementation(2)(3)(4)' ``` - 參數解釋: - (1): jar包位置 hdfs的路徑 - (2): jar包的協處理器的權限定名 - (3): 協處理器的優先級別( 同一個表中添加多個協處理器,優先級問題 使用數字表示,數字越大表明優先級越高 ) - (4): 代碼中程序的參數,沒有不傳
```sh hbase> enable 'table名'; ```
協處理器卸載
禁用表
disable 'mytable'
卸載
alter 'mytable',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
啓用表
enable 'mytable'
協處理器查詢加鹽以後的表
因爲每一個Region中實際上是有Start Key 和 End Key的, 它們是由咱們所建立的表指定的, 而協處理器的代碼實際上是在每一個Region中執行的。
這些代碼在Region裏面執行的時候是能夠拿到當前Region的信息的, 包括了Start Key 和 End Key。
咱們只要將拿到的Start Key 信息和查詢的 UID 進行拼接, 這樣就能夠查詢到咱們要的數據。