HBase是一个构建在HDFS之上,用于海量数据、分布式列存储系统。它只能通过RowKey直接获取数据,不能够实现类似于MySQL组合索引方式的查询,因此我们考虑到位HBase建立二级索引。
一、基于Coprocessor方案
1、官方特性
其实从0.94版本开始,HBase官方文档已经提出了HBase上面实现二级索引的一种路径:
- 基于Coprocessor(0.92版本开始引入,达到支持类似传统RDBMS的触发器的行为);
- 开发自定义数据处理逻辑,采用数据“双写”(dual-write)策略,在有数据写入同时同步到二级索引表;
2、开源方案
虽然官方一直也没提供内置的支持二级索引的工具, 不过业界也有些比较知名的基于Coprocessor的开源方案:
(1)华为的hindex : 基于0.94版本,当年刚出来的时候比较火,但是版本较旧,看GitHub项目地址最近这几年就没更新过。
(2)Apache Phoenix: 功能围绕着SQL on hbase,支持和兼容多个hbase版本, 二级索引只是其中一块功能。 二级索引的创建和管理直接有SQL语法支持,使用起来很简便, 该项目目前社区活跃度和版本更新迭代情况都比较好。
Apache Phoenix在目前开源的方案中,是一个比较优的选择。主打SQL on HBase ,基于SQL能完成HBase的CRUD操作,支持JDBC协议。
Apache Phoenix在Hadoop生态里面位置:
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项目已经比较长时间没有更新了。
2、CDH Search
CDH Search是Hadoop发行商Cloudera公司开发的基于solr的HBase检索方案,部分集成了Lily HBase Indexer的功能。
CDH Solr 索引查询流程示意图:
三、基于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技术专栏。
获取更多设计细节和项目源代码,可访问小编的Hadoop大数据技术专栏。
閱讀更多 軟件架構 的文章
關鍵字: Java 二级 ElasticSearch