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大数据技术专栏。


分享到:


相關文章: