一文读懂 HBase 核心知识
一、HBase核心概述
HBase(Hadoop Database)是一个基于Google BigTable论文设计的开源、高可靠性、高性能、可扩展的分布式存储系统。HBase存储引擎是通过LSM树(Log-Structured Merge Tree)结构实现的,底层数据存储基于HDFS,原生的支持MapReduce作为计算引擎,具有高吞吐、低延时的读写特点。
1、数据模型
首先讲一下HBase的数据模型。HBase数据存储在 table 中,table 具有松散表结构(schema-free),不需要预先定义好schema,只有在数据写入时才须定义Column,理论上数据列可以无限多。
HBase的列由列族(Column Family)和 列限定符(Column Qualifier)组成,以逗号分隔标识一个列。HBase数据是按Rowkey进行字典排序的,Rowkey相当于关系型数据库的主键,数据写入时必须指定Rowkey。HBase中的Rowkey、列族、列限定符共同组成一个称为Cell的存储单元,Cell包含具体的数据,以及用于区分Cell版本的 timestamp。
2、列族式存储
HBase是面向列族存储的。HBase每一列数据在底层是以 KV 形式存储的,针对一行数据,如果其列族相同,那么这些列的数据是顺序相邻存放的,所以是看上去像是以列族为伪列进行列式存储的,实际上并不是真正的列式存储,而是面向列族存储,或者说Column Family级别列存。
3、自动分区
HBase支持自动分区。HBase表在水平方向上根据Rowkey被划分成多个Region,由[startkey,endkey)表示,Region是HBase读写可用性、分布式存储和负载均衡的基本单元。Region分散在不同的RegionServer中,使得数据分片分布在整个集群。当Region达到一定大小时(hbase.hregion.max.filesize)就会自动分裂成两个Region,达到自动分区的效果。
4、单列索引
默认情况下HBase对Rowkey做了单列索引,所以HBase能通过Rowkey进行高效的随机查询或范围查询。相对来说,HBase索引还是比较单一,通过非Rowkey列查询性能比较低,除非对非Rowkey列做二级索引(secondary index),目前二级索引方案大多是基于 HBase Coprocessor即协处理器实现,比如Phoenix。
5、刷写与压缩
由于HBase基于LSM Tree思想设计,新增变更的数据首先写入 WAL(Write Ahead Log),然后会写到Region的内存缓冲区MemStore中,当MemStore大小达到一定阈值或满足其他触发条件时,数据会刷写到磁盘(Flush)生成StoreFile(HFile),HFile是HBase底层数据的文件存储格式。
随着时间的推移,磁盘中会存在大量的HFile文件,文件过多会严重影响读取HBase的性能,为了提高性能,HBase会做合并HFile文件(Compaction)操作,以减少文件个数,清理过期或删除的数据。
二、HBase生态组件介绍
随着HBase功能越来越完善,构建在HBase之上的生态环境也越来越健全,衍生了包括SQL,时序,时空,以及图等各个方面的项目:
三、HBase应用场景
HBase是一个存储系统,也是一个NoSQL数据库。由于HBase丰富的特性,加上自身的并发能力、存储能力与高效读写能力,使得HBase有着比较广泛的应用场景:
- 订单/消息存储:HBase可以支持金融、电信领域的订单/账单查询,另外不少通信、消息同步的应用也构建在HBase之上。
- 用户画像:可以支持用户画像的存储,蚂蚁的风控就是构建在HBase之上。
- 对象存储:不少头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中。
- 时序数据:HBase之上有OpenTSDB模块,可以满足时序类场景的需求。
- 时空数据:主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在车联网企业有不少数据存在HBase之中。
- Cube分析:Kylin一个cube分析工具,底层的数据存储在HBase之中,不少客户自己基于离线计算构建的cube也存储在hbase之中,满足在线报表查询的需求。
- Feeds流:高并发请求访问,典型的场景就是朋友圈类似的应用。
- NewSQL:HBase之上有Phoenix的插件,可以满足二级索引、SQL的需求,对接传统数据需要SQL非事务的需求。
四、HBase2.0新特性介绍
2018年4月份HBase发布了2.0版本,是HBase迄今为止非常重要的一个大版本,有很多值得关注的Features,下面列举其中非常重要的几个特性:
- Mob小对象存储:可以高效的存储100KB~10M中等大小对象,能够满足一般文档、图片的存储。
- 读写链路的Offheap:引入OffHeap降低GC影响,优化了读写链路延迟。
- Region Replica:为Region引入副本,提供高可用读,避免宕机影响。
- In-Memory Compaction:内存先进行flush然后compaction,当达到一定阈值再flush到磁盘,减少了磁盘io同时提升了读性能。
- Assignment Manager V2:基于Procedure V2,使得Region assign/unassign的速度大大提升,能够更好的解决Region长时间RIT问题。
- 其他
五、总结
HBase是架构在HDFS之上面向列的分布式存储系统,在很多领域都有广泛应用,主要解决高并发、随机读写的业务场景,适合海量数据的永久性存储。
国内很多知名公司如阿里、腾讯、小米、滴滴、360等都在使用HBase,并有很好的应用实践。后续介绍更多HBase技术细节。