首页 > > > HBase二级索引方案

HBase简介
HBase是一个构建在HDFS之上,用于海量数据存储分布式列存储系统。
参见下图,由于在HBase中:
所以HBase主要适用下面这两种常见场景:


为什么需要HBase二级索引
HBase里面只有rowkey作为一级索引, 如果要对库里的非rowkey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行, 硬件资源消耗和时间延迟都会比较高。
为了HBase的数据查询更高效、适应更多的场景, 诸如使用非rowkey字段检索也能做到秒级响应, 或者支持各个字段进行模糊查询和多字段组合查询等, 因此需要在HBase上面构建二级索引, 以满足现实中更复杂多样的业务需求。
HBase二级索引方案
接下来介绍下主流的几种HBase二级索引方案:
基于Coprocessor方案
官方特性
其实从0.94版本开始,HBase官方文档已经提出了hbase上面实现二级索引的一种路径:
开源方案
虽然官方一直也没提供内置的支持二级索引的工具, 不过业界也有些比较知名的基于Coprocessor的开源方案:
Apache Phoenix在目前开源的方案中,是一个比较优的选择。主打SQL on HBase , 基于SQL能完成HBase的CRUD操作,支持JDBC协议。 Apache Phoenix在Hadoop生态里面位置:

Phoenix二级索引特点:
其他的在网上也很多自己基于Coprocessor实现二级索引的文章,大体都是遵循类似的思路: 构建一份“索引”的映射关系,存储在另一张hbase表或者其他DB里面。
方案优缺点:
非Coprocessor方案
选择不基于Coprocessor开发,自行在外部构建和维护索引关系也是另外一种方式。
常见的是采用底层基于Apache Lucene的Elasticsearch(下面简称ES)或Apache Solr ,来构建强大的索引能力、搜索能力, 例如支持模糊查询、全文检索、组合查询、排序等。
Lily HBase Indexer
Lily HBase Indexer(也简称 HBase Indexer)是国外的NGDATA公司开源的基于solr的索引构建工具, 特色是其基于HBase的备份机制,开发了一个叫SEP工具, 通过监控HBase 的WAL日志(Put/Delete操作),来触发对solr集群索引的异步更新, 基本对HBase无侵入性(但必须开启WAL ), 流程图如下所示:

CDH Search
CDH Search是Hadoop发行商Cloudera公司开发的基于solr的HBase检索方案,部分集成了Lily HBase Indexer的功能。
下面是CDH search的核心组件交互图, 体现了在单次client端查询过程中, 核心的zookeeper和solr等的交互流程:

CDH 支持构建索引方式:
CDH Solr 索引查询流程示意图:

Datastory 二级索引方案介绍
其实对于在外部自定义构建二级索引的方式, 有自己的大数据团队的公司一般都会针对自己的业务场景进行优化, 自行构建ES/Solr的搜索集群。 例如数说故事企业内部的百亿级数据全量库,就是基于ES构建海量索引和检索能力的案例。 主要的要考虑点包括:
下面显示了数说基于ES做二级索引的两种构建流程, 包含:

数据查询流程:

Datastory在做全量库的过程中,还是有更多遇到的问题要解决,诸如数据一致性、大量小索引、多版本ES集群共存等, 会在后续进行更细致的介绍和分享。
原文作者:;如有侵权,请联系管理员删除。