一文读懂 HBase 核心原理与应用场景

千里1年前 ⋅ 974 阅读

1、存储引擎

HBase是Google的BigTable的开源实现,底层存储引擎是基于LSM-Tree数据结构设计的。写入数据时会先写WAL日志,再将数据写到写缓存MemStore中,等写缓存达到一定规模后或满足其他触发条件才会flush刷写到磁盘,这样就将磁盘随机写变成了顺序写,提高了写性能。每一次刷写磁盘都会生成新的HFile文件。可以参考如下的原理图:

5、HBase主要特点

每个组件都有它的强项和弱项,HBase也有它擅长与短板之处。

优点:

  • 容量大:HBase单表可以很庞大,加上其分布式、高伸缩性的特点,使得HBase特别适合海量数据的永久性存储。

  • 高性能:HBase具有非常高的读写性能,基于LSM-Tree的数据结构使得HBase写入数据性能强劲,另外得益于HBase读路径上的各种设计及优化,HBase读数据的性能也可以保持在毫秒级。

  • 高可靠:因为数据写路径上是先写WAL日志,防止缓存数据的丢失,加上HBase底层数据的多副本机制,保证了数据的可靠性。

  • 原始支持Hadoop:HBase底层存储基于HDFS,也原生集成了MapReduce做离线计算。HBase这种架构体系也使得HBase非常易于扩展。

  • 无模式:HBase的表是schema-free的,无需提前定义schema,只会在数据写入时才会增加列。

  • 稀疏性:HBase是表具有稀疏性,null值的列并不占用任何存储空,这一点和关系库不同,大大节省了存储空间。

  • 多版本:HBase支持多版本,每一个单元格包含timestamp时间戳,标识着数据的版本号。

缺点:

  • 数据分析能力弱:数据分析是HBase的弱项,比如聚合运算、多维度复杂查询、多表关联查询等。所以,我们一般在HBase之上架设Phoenix或Spark等组件,增强HBase数据分析处理的能力。

  • 原生不支持二级索引:默认HBase只对rowkey做了单列索引,因此正常情况下对非rowkey列做查询比较慢。所以,我们一般会选择一个HBase二级索引解决方案,目前比较成熟的解决方案是Phoenix,此外还可以选择Elasticsearch/Solr等搜索引擎自己设计实现。

  • 原生不支持SQL:SQL查询也是HBase的一个弱项,好在这块可以通过引入Phoenix解决,Phoenix是专为HBase设计的SQL层。

6、HBase的应用场景

HBase经常应用在订单/消息存储、用户画像、搜索推荐、社交Feed流、安全风控、以及物联网时序数据等诸多场景。社区也写过HBase应用场景的相关文章:再谈HBase八大应用场景,可以参考。

如果你的场景里需要存储海量数据,并发读写非常高,而且并不需特别复杂的数据分析,那么强烈建议你使用HBase。

https://mp.weixin.qq.com/s?__biz=MzUxOTU5Mjk2OA==&mid=2247485469&idx=1&sn=13ac1c66e6d81f969fb4f96ff2338e99&chksm=f9f6057ace818c6ce018dfd3f9eddf4ad1454c13c5303b3a9849c35fe2ad5e051625aa3e17f8&scene=21

全部评论: 0

    相关推荐