hbase(三)coprocessor
介紹
coprocessor這個(gè)單詞看起來(lái)很神秘,直譯為協(xié)處理器,其實(shí)可以理解成依賴于regionserver進(jìn)程的輔助處理接口。
hbae在0.92版本之后提供了coprocessor接口。目前hbase支持兩種coprocessor,endpoint和observer。hbase在未來(lái)版本可能考慮將coprocessor進(jìn)程獨(dú)立出來(lái),單獨(dú)起個(gè)服務(wù)。
?
endpoint coprocessor
Endpoint 協(xié)處理器類似傳統(tǒng)數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程,客戶端可以調(diào)用這些 Endpoint 協(xié)處理器執(zhí)行一段 Server 端代碼,并將 Server 端代碼的結(jié)果返回給客戶端進(jìn)一步處理,最常見(jiàn)的用法就是進(jìn)行聚集操作。如果沒(méi)有協(xié)處理器,當(dāng)用戶需要找出一張表中的最大數(shù)據(jù),即 max 聚合操作,就必須進(jìn)行全表掃描,在客戶端代碼內(nèi)遍歷掃描結(jié)果,并執(zhí)行求最大值的操作。這樣的方法無(wú)法利用底層集群的并發(fā)能力,而將所有計(jì)算都集中到 Client 端統(tǒng)一執(zhí)行,勢(shì)必效率低下。利用 Coprocessor,用戶可以將求最大值的代碼部署到 HBase Server 端,HBase 將利用底層 cluster 的多個(gè)節(jié)點(diǎn)并發(fā)執(zhí)行求最大值的操作。即在每個(gè) Region 范圍內(nèi)執(zhí)行求最大值的代碼,將每個(gè) Region 的最大值在 Region Server 端計(jì)算出,僅僅將該 max 值返回給客戶端。在客戶端進(jìn)一步將多個(gè) Region 的最大值進(jìn)一步處理而找到其中的最大值。這樣整體的執(zhí)行效率就會(huì)提高很多。說(shuō)白了,coprocessor就是hbase提供一些接口和規(guī)則,讓你可以在regionserver服務(wù)中執(zhí)行你自定義的代碼。這個(gè)規(guī)則就是基于google的protobuf。
?
endpoint observer在多個(gè)regionserver上執(zhí)行,執(zhí)行結(jié)果返回給client,這個(gè)過(guò)程有點(diǎn)像mapreduce,map操作在regionserver端,reduce在client端。下圖為endpoint執(zhí)行流程。
?
?
observer coprocessor
另外一種協(xié)處理器叫做 Observer Coprocessor,這種協(xié)處理器類似于傳統(tǒng)數(shù)據(jù)庫(kù)中的觸發(fā)器,思路上類似AOP的思想,當(dāng)發(fā)生某些事件的時(shí)候這類協(xié)處理器會(huì)被 Server 端調(diào)用。Observer Coprocessor 就是一些散布在 HBase Server 端代碼中的 hook 鉤子.
在Region層面,比如:put 操作之前有鉤子函數(shù) prePut,該函數(shù)在 put 操作執(zhí)行前會(huì)被 Region Server 調(diào)用;在 put 操作之后則有 postPut 鉤子函數(shù)。還有例如get,delete,scan等其他操作的鉤子.
在regionserver層面,observer coprocessor還提供了WALObserver
在MasterObserver層面,提供了DDL操作的相關(guān)鉤子,create,delete等
?
下圖為observer coprocessor執(zhí)行流程,注意最后的regionObserver是在服務(wù)端執(zhí)行的,因此自定義的observer coprocessor代碼打包后需要放在hbase服務(wù)端也就是regionserver的classpath下。
?
?
例子
參考hbaes源碼中的src/example/coprocessor
?
引用
https://blogs.apache.org/hbase/entry/coprocessor_introduction
?
轉(zhuǎn)載于:https://www.cnblogs.com/ulysses-you/p/9256723.html
總結(jié)
以上是生活随笔為你收集整理的hbase(三)coprocessor的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HTTP请求的拦截
- 下一篇: 荷兰籍空乘服务中国春运:对春节有着别样的