天天看點

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

1.文檔編寫目的

HBase是一款基于Hadoop的Key-Value資料庫,提供了對HDFS上資料的高效随機讀寫服務,填補了Hadoop MapReduce批處理的缺陷,但HBase作為列簇資料庫無法輕易的建立“二級索引”、難以執行求和、計數、排序等操作。在HBase0.96版本後引入了協處理器(Coprocessor),使用者可以編寫運作在HBase Server端的代碼。HBase支援兩種類型的協處理器,Endpoint和Observer。

Endpoint協處理器類似傳統資料庫中的存儲過程,用戶端可以調用這些Endpoint協處理器執行一段Server端代碼,并将Server端代碼的結果傳回給用戶端處理。

Observer Coprocessor,這中協處理器類似于傳統資料庫中的觸發器,當發生某些事件的時候,Observer協處理器會被Server端調用。

本篇文章先不介紹如何去開發協處理器,主要借助于HBase示例中自帶的RowCount Endpoint協處理器來說明如何使用Java代碼在用戶端調用。在後面的文章Fayson會介紹如何去編寫一個協處理器。

Endpoint Coprocessor用戶端調用過程,如下圖所示:

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

  • 内容概述

1.環境準備

2.編寫Java示例代碼及運作

3.統計方式對比

  • 測試環境

1.CM和CDH版本為5.14.3

2.環境準備

HBase中自帶的Endpoint的協處理器,在hbase-examples.jar包中,在CDH的/opt/cloudera/parcels/CDH/lib/hbase/lib目錄下,如下圖所示:

1.确認hbase-examples-1.2.0-cdh5.14.2.jar是否在

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

注意:在這裡的配置為全局配置,協處理器有兩種使用方式上圖的方式是其中的一種,另外一種則是對單個表進行修改。

3.編寫Java示例

1.建立HBase的Maven工程

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

2.工程的pom.xml檔案内容如下

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

3.編寫CoprocessorExample.java類,内容如下

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

4.示例代碼運作

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

4.HBase表統計效率對比

1.使用HBase的count來統計測試表的總條數

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

2.使用HBase提供的MapReduce方式統計測試表的總條數

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor
HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

執行耗時:14.12s

耗時統計:

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

5.總結

  • 在使用HBase的coprocessor方法是如果傳入startkey和endkey是會根據rowkey的通路檢索出符合條件的region并統計每個region上資料量。
  • HBase的Endpoint Coprocessor協處理器可以通過CM的方式配置全局的也可以通過用戶端或hbase shell的方式來指定某一個表使用比較靈活,在後面的文章Fayson會介紹如何指定單個表的方式。

GitHub位址:

https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/CoprocessorExample.java

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

大家工作學習遇到HBase技術問題,把問題釋出到HBase技術社群論壇http://hbase.group,歡迎大家論壇上面提問留言讨論。想了解更多HBase技術關注HBase技術社群公衆号(微信号:hbasegroup),非常歡迎大家積極投稿。

HBase實操 | 使用Java調用HBase的Endpoint Coprocessor

HBase技術交流社群 - 阿裡官方“HBase生态+Spark社群大群”點選加入:

https://dwz.cn/Fvqv066s