2021年大数据HBase(十六):HBase的协处理器(Coprocessor)
全網最詳細的大數據HBase文章系列,強烈建議收藏加關注!?
新文章都已經列出歷史文章目錄,幫助大家回顧前面的知識重點。
目錄
系列歷史文章
HBase的協處理器(Coprocessor)
一、起源
二、協處理器主要的分類
三、HBase的協處理器_ObServer
四、HBase的協處理器_Endpoint
五、概念總結
六、加載的方式
1、靜態加載
2、動態加載:
七、卸載的方式
1、禁用表: ? ? ?
2、修改表: 刪除協處理器的配置信息 ? ? ?
3、啟動表 ? ?
八、HBase的協處理器總結
系列歷史文章
2021年大數據HBase(十七):HBase的360度全面調優
2021年大數據HBase(十六):HBase的協處理器(Coprocessor)
2021年大數據HBase(十五):HBase的Bulk Load批量加載操作
2021年大數據HBase(十四):HBase的原理及其相關的工作機制
2021年大數據HBase(十三):HBase讀取和存儲數據的流程
2021年大數據HBase(十二):Apache Phoenix 二級索引
2021年大數據HBase(十一):Apache Phoenix的視圖操作
2021年大數據HBase(十):Apache Phoenix的基本入門操作
2021年大數據HBase(九):Apache Phoenix的安裝
2021年大數據HBase(八):Apache Phoenix的基本介紹
2021年大數據HBase(七):Hbase的架構!【建議收藏】
2021年大數據HBase(六):HBase的高可用!【建議收藏】
2021年大數據HBase(五):HBase的相關操作-JavaAPI方式!【建議收藏】
2021年大數據HBase(四):HBase的相關操作-客戶端命令式!【建議收藏】
2021年大數據HBase(三):HBase數據模型
2021年大數據HBase(二):HBase集群安裝操作
2021年大數據HBase(一):HBase基本簡介
HBase的協處理器(Coprocessor)
一、起源
Hbase 作為列族數據庫最經常被人詬病的特性包括:
- 無法輕易建立“二級索引”
- 難以執 行求和、計數、排序等操作
比如,在舊版本的(<0.92)Hbase 中,統計數據表的總行數,需要使用 Counter 方法,執行一次 MapReduce Job 才能得到。雖然 HBase 在數據存儲層中集成了 MapReduce,能夠有效用于數據表的分布式計算。然而在很多情況下,做一些簡單的相加或者聚合計算的時候, 如果直接將計算過程放置在 server 端,能夠減少通訊開銷,從而獲 得很好的性能提升
于是, HBase 在 0.92 之后引入了協處理器(coprocessors),實現一些激動人心的新特性:能夠輕易建立二次索引、復雜過濾器(謂詞下推)以及訪問控制等。
二、協處理器主要的分類
- ObServer
- Endpoint
三、HBase的協處理器_ObServer
ObServer 類似于傳統數據庫中的觸發器,當發生某些事件的時候這類協處理器會被 Server 端調用。
ObServer Coprocessor 就是一些散布在 HBase Server 端代碼中的 hook 鉤子, 在固定的事件發生時被調用。
比如: put 操作之前有鉤子函數 prePut,該函數在 put 操作 執行前會被 Region Server 調用;在 put 操作之后則有 postPut 鉤子函數
以 Hbase2.0.0 版本為例,它提供了三種觀察者接口:
- RegionObserver:提供客戶端的數據操縱事件鉤子: Get、 Put、 Delete、 Scan 等
- WALObserver:提供 WAL 相關操作鉤子。
- MasterObserver:提供 DDL-類型的操作鉤子。如創建、刪除、修改數據表等。
- 到 0.96 版本又新增一個 RegionServerObserver
下面是以 RegionObserver 為例子講解 Observer 這種協處理器的原理:
- 比如客戶端發起get請求
- 該請求被分派給合適的RegionServer和Region
- coprocessorHost攔截該請求,然后在該表上登記的每個RegionObserer上調用preGet()
- 如果沒有被preGet攔截,該請求繼續送到Region,然后進行處理
- Region產生的結果再次被coprocessorHost攔截,調用postGet()處理
- 加入沒有postGet()攔截該響應,最終結果被返回給客戶端
四、HBase的協處理器_Endpoint
- Endpoint 協處理器類似傳統數據庫中的存儲過程,客戶端可以調用這些 Endpoint 協處理器執行一段 Server 端代碼,并將 Server 端代碼的結果返回給客戶端進一步處理,最常見的用法就是進行聚集操作
- 如果沒有協處理器,當用戶需要找出一張表中的最大數據,即max 聚合操作,就必須進行全表掃描,在客戶端代碼內遍歷掃描結果,并執行求最大值的操作。這樣的方法無法利用底層集群的并發能力,而將所有計算都集中到 Client 端統一執 行,勢必效率低下。
- 利用 Coprocessor,用戶可以將求最大值的代碼部署到 HBase Server 端,HBase 將利用底層 cluster 的多個節點并發執行求最大值的操作。即在每個 Region 范圍內 執行求最大值的代碼,將每個 Region 的最大值在 Region Server 端計算出,僅僅將該 max 值返回給客戶端。在客戶端進一步將多個 Region 的最大值進一步處理而找到其中的最大值。這樣整體的執行效率就會提高很多
下圖是 EndPoint 的工作原理:
五、概念總結
- observer 允許集群在正常的客戶端操作過程中可以有不同的行為表現
- endpoint 允許擴展集群的能力,對客戶端應用開放新的運算命令
- observer 類似于 RDBMS 中的觸發器,主要在服務端工作
- endpoint 類似于 RDBMS 中的存儲過程,主要在 服務器端、client 端工作
- observer 可以實現權限管理、優先級設置、監控、 ddl 控制、 二級索引等功能
- endpoint 可以實現 min、 max、 avg、 sum、 distinct、 group by 等功能
六、加載的方式
1、靜態加載
- 通過修改 hbase-site.xml 這個文件來實現
- 啟動全局 aggregation,能過操縱所有的表上的數據。只需要添加如下代碼:
注意: 為所有 table 加載了一個 cp class,可以用” ,”分割加載多個 class
2、動態加載:
- 啟用表 aggregation,只對特定的表生效
- 通過 HBase Shell 來實現,disable 禁用表
- 添加 aggregation , 添加后啟用表即可
hbase> alter 'mytable', METHOD => 'table_att','coprocessor'=>'|org.apache.Hadoop.hbase.coprocessor.AggregateImplementation||'
七、卸載的方式
1、禁用表: ? ? ?
disable 'test'
2、修改表: 刪除協處理器的配置信息 ? ? ?
alter ‘test’, METHOD => 'table_att_unset', NAME => 'coprocessor$1’
3、啟動表 ? ?
enable 'test'
八、HBase的協處理器總結
Hbase的協處理器主要有二大類: ObServer 和 Endpoint
-
ObServer: 可以將其看做是攔截器(過濾器 觸發器), 可以基于這種協處理器對Hbase相關操作進行監控(鉤子 Hook)
-
例如: 監控用戶插入到某個表操作, 插入之前要打印一句話
-
ObServer所提供一些類, 這些類可以監控到HBase中各種操作: 對數據的CURD 對表的CURD 對region的操作 對日志操作
-
ObServer能做什么事情?
-
1) 記錄操作日志
-
2) 權限的管理
-
-
-
Endpoint: 可以看做數據庫中存儲過程,也可以看做在java代碼中封裝一個方法(功能), 將這個方法放置服務端, 讓服務器進行執行操作, 客戶端只需要拿到服務端執行結果即可
-
作用: 執行一些聚合操作: 求和 求差 求最大 ....
-
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据HBase(十六):HBase的协处理器(Coprocessor)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据HBase(十五):HB
- 下一篇: 2021年大数据HBase(十七):❤️