「从零单排HBase 11」HBase二级索引解决方案

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 「从零单排HBase 11」HBase二级索引解决方案

1.为什么需要二级索引


HBase系统单纯从解决大数据实时读写问题角度出发,重点关注于分布式存储的扩展性、容错性、读写性能等方面,为此也牺牲了很多传统关系型数据库的功能,比如事务,SQL表达与分析等。


实际上,这是NoSQL最初的含义,以解决大数据的实时存取为首要目标,提供简单的Get,Put,Scan接口,解决用户的大数据量存储的需求。因此,HBase完全是一个非常优秀的大数据实时存取引擎,解决了传统数据库的容量问题。


就目前官方的HBase系统来说,并不支持二级索引,只有rowkey作为一级索引, 如果要对库里的非rowkey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。


为了HBase的数据查询更高效、适应更多的场景, 诸如使用非rowkey字段检索也能做到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等, 因此需要在原生HBase基础上构建二级索引, 以满足现实中更复杂多样的业务需求。一般有以下三类方案:


  • 基于HBase的Coprocessor的方案(典型代表phoenix)
  • 云厂商自研的二级索引(阿里云目前有自研增强版二级索引)
  • 基于搜索平台的索引方案(如solr、ES等)。


2.如何选择二级索引方案


我们从读写性能、使用限制、学习成本、社区活跃等角度,对三类方案做对比。


基于HBase的Coprocessor的方案(典型代表phoenix)


  • 官方文档:http://phoenix.apache.org/secondary_indexing.html
  • 读写性能:有一定读写性能损害,索引越多,写入性能影响越大
  • TTL功能:支持比较好
  • 索引的使用限制:一个表的索引数不要超过10个
  • 索引类型:全局索引、本地索引、覆盖索引
  • 学习成本:类JDBC的sql语法,多参考官方的语法(http://phoenix.apache.org/language/index.html
  • 开源/社区活跃程度:开源,目前社区不太活跃
  • 优点:社区文档多、使用简单、实时查询无延迟
  • 缺点:非商业化方案,没有专门的技术支持


云厂商自研的二级索引(典型代表阿里云自研增强版二级索引)


  • 官方文档:https://help.aliyun.com/document_detail/144577.html?spm=a2c4g.11174283.6.576.4999363f2uZWt0
  • 读写性能:二级索引内置于HBase,官方的性能评测文档说比Phoenix好
  • TTL功能:只能在单列索引上生效
  • 索引的使用限制:一个表的索引个数最多不超过5个、组合索引的列最多不要超过3个
  • 索引类型:全局索引、本地索引、覆盖索引
  • 学习成本:内部封装的很简单,在使用上就是HBase的原生用法
  • 开源/社区活跃程度:非开源、阿里云私有
  • 优点:性能好、实时查询无延迟
  • 缺点:被云厂商锁定


基于搜索平台的二级索引方案(以Solr为例)


  • 官方文档:http://phoenix.apache.org/secondary_indexing.html
  • 读写性能:有一定读写性能损害、数据同步的延迟需要考虑
  • TTL功能:HBase是单个KV过期,而Solr中只能按照Document(对应HBase的一行)过期,过期的时间不完全一致
  • 索引的使用限制:没有限制,完全取决于solr
  • 索引类型:非常灵活
  • 学习成本:需要熟悉solr语法
  • 开源/社区活跃程度:开源 社区活跃
  • 优点:查询方式更加灵活
  • 缺点:引入搜索引擎组件、太重了,而且有明显的延迟问题


总结一下(特别重要的技术选型策略):


  • 为了不被云厂商锁定,所以不采用云厂商独有的二级索引方案
  • 对于实时性要求高、索引数量少的场景,完全可以使用phoenix,简单而又丝滑
  • 对于实时性要求不高、搜索场景比较复杂的,需要引入搜索引擎,如solr或者es进行索引构建


一般来说,为了满足实时需求,我们会使用phoenix。


3.简单了解下phoenix


为了让HBase更强大,更好用,门槛更低,让HBase帮助更多的用户解决他们遇到的实际问题。于是,phoenix带着SQL诞生了。众所周知,SQL是数据处理领域的语言标准,简单,好用,表达力强,用户使用广泛。当然,HBase SQL的实现和发展跟传统单机数据库有很多不同,便于区别,我们称之为NewSQL。这也是社区尝试HBase二级索引的初衷,如果说HBase是功能强大的存储引擎,那么支持NewSQL之后,就变成了新一代的大飞机。


Phoenix作为应用层和HBASE之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势


  • 二级索引支持(global index + local index)
  • 编译SQL成为原生HBASE的可并行执行的scan
  • 在数据层完成计算,server端的coprocessor执行聚合
  • 下推where过滤条件到server端的scan filter上
  • skip scan功能提高扫描速度
相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
分布式计算 安全 Hadoop
HBase启动时有进程webUI不显示HRegionServer各种情况解决方案
HBase启动时有进程webUI不显示HRegionServer各种情况解决方案
340 0
|
XML 存储 分布式计算
hbase构建二级索引解决方案
HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索。假设我们相对Hbase里面列族的列列进行一些组合查询,就只能全表扫描了。表如果较大的话,代价是不可接受的,所以要提出二级索引的方案。
972 0
hbase构建二级索引解决方案
|
5月前
|
存储 NoSQL 分布式数据库
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
Hbase的三种索引_全局索引,覆盖索引,本地索引(七)
144 0
|
5月前
|
SQL 分布式数据库 HIVE
Hbase二级索引_Hive on Hbase 及phoenix详解
Hbase二级索引_Hive on Hbase 及phoenix详解
72 0
|
SQL 分布式数据库 Apache
|
分布式数据库 索引 Hbase
《HBase应用与发展之HBase RowKey与索引设计》电子版地址
HBase应用与发展之HBase RowKey与索引设计
120 0
《HBase应用与发展之HBase RowKey与索引设计》电子版地址
|
分布式计算 Hadoop Linux
云计算集群搭建记录[Hadoop|Zookeeper|Hbase|Spark | Docker]更新索引 |动态更新
为了能够更好的查看所更新的文章,讲该博文设为索引 小约定 为了解决在编辑文件等操作的过程中的权限问题,博主一律默认采用root账户登录 对于初次安装的用户可以采用如下命令行:
136 0
云计算集群搭建记录[Hadoop|Zookeeper|Hbase|Spark | Docker]更新索引 |动态更新
|
SQL 搜索推荐 Java
「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践
「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践
537 0
「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践
|
1月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
68 4