HBase二級索引建設方案分析比較

HBase是一個構建在HDFS之上,用於海量數據、分佈式列存儲系統。它只能通過RowKey直接獲取數據,不能夠實現類似於MySQL組合索引方式的查詢,因此我們考慮到位HBase建立二級索引。


一、基於Coprocessor方案

1、官方特性

其實從0.94版本開始,HBase官方文檔已經提出了HBase上面實現二級索引的一種路徑:

  • 基於Coprocessor(0.92版本開始引入,達到支持類似傳統RDBMS的觸發器的行為);
  • 開發自定義數據處理邏輯,採用數據“雙寫”(dual-write)策略,在有數據寫入同時同步到二級索引表;


2、開源方案

雖然官方一直也沒提供內置的支持二級索引的工具, 不過業界也有些比較知名的基於Coprocessor的開源方案:

(1)華為的hindex : 基於0.94版本,當年剛出來的時候比較火,但是版本較舊,看GitHub項目地址最近這幾年就沒更新過。

HBase二級索引建設方案分析比較

(2)Apache Phoenix: 功能圍繞著SQL on hbase,支持和兼容多個hbase版本, 二級索引只是其中一塊功能。 二級索引的創建和管理直接有SQL語法支持,使用起來很簡便, 該項目目前社區活躍度和版本更新迭代情況都比較好。

Apache Phoenix在目前開源的方案中,是一個比較優的選擇。主打SQL on HBase ,基於SQL能完成HBase的CRUD操作,支持JDBC協議。

Apache Phoenix在Hadoop生態裡面位置:

HBase二級索引建設方案分析比較

3. 方案優缺點

優點: 基於Coprocessor的方案,從開發設計的角度看,把很多對二級索引管理的細節都封裝在的Coprocessor具體實現類裡面, 這些細節對外面讀寫的人是無感知的,簡化了數據訪問者的使用。

缺點: 但是Coprocessor的方案入侵性比較強,增加了在Region server內部需要運行和維護二級索引關係表的代碼邏輯等,對Region server的性能會有一定影響。


二、非Coprocessor方案

選擇不基於Coprocessor開發,自行在外部構建和維護索引關係也是另外一種方式。

常見的是採用底層基於Apache Lucene的Elasticsearch(下面簡稱ES)或Apache Solr ,來構建強大的索引能力、搜索能力,例如支持模糊查詢、全文檢索、組合查詢、排序等。


1、Lily HBase Indexer

Lily HBase Indexer(也簡稱 HBase Indexer)是國外的NGDATA公司開源的基於solr的索引構建工具, 特色是其基於HBase的備份機制,開發了一個叫SEP工具, 通過監控HBase 的WAL日誌(Put/Delete操作),來觸發對solr集群索引的異步更新, 基本對HBase無侵入性(但必須開啟WAL )。

從github上來看,Lily HBase Indexer項目已經比較長時間沒有更新了。

HBase二級索引建設方案分析比較



2、CDH Search

CDH Search是Hadoop發行商Cloudera公司開發的基於solr的HBase檢索方案,部分集成了Lily HBase Indexer的功能。

CDH Solr 索引查詢流程示意圖:

HBase二級索引建設方案分析比較


三、基於Elasticsearch的HBase二級索引方案

作者重點推薦這個方案。

HBase作為基礎存儲,Elasticsearch作為數據索引。根據業務需求,判斷哪些需要建立二級索引,存入 Elasticsearch中,建立索引與HBase的關聯外鍵,可以實現實時搜索。


本項目實例涉及到如下一些技術點,技術實現難度4顆星(總共5顆星)。

1. Elasticsearch

Elasticsearch以及Elasticsearch內置API-Java High Level REST Client等等;對Elasticsearch不熟悉的夥伴,可以參考小編的Elasticsearch技術專欄。

2. HBase

HBase安裝部署、常用的Shell命令,以及基於HBase Java API編程等等;具體可以訪問本技術專欄前面關於HBase的文章。

3. Spring Boot

基於Spring Boot構建微服務應用,並集成Elasticsearch的Java High Level REST Client API。具體可以參考小編的Spring Boot技術專欄。

HBase二級索引建設方案分析比較

獲取更多設計細節和項目源代碼,可訪問小編的Hadoop大數據技術專欄。


分享到:


相關文章: