这是我参与「第四届青训营 」笔记创作活动的第2天
今天学的是HBase,首先进行初步了解HBase
1. HBase简介:
Hbase是Hadoop Database的简称。Hbase是分布式、面向列的开源数据库(其实准确的说是面向列族)。HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供稳定服务和Failover机制,因此我们说Hbase是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。
HBase是一个开源的NoSQL分布式数据库,对稀疏表提供更高的存储空间使用率和读写效率。
采用存储计算分离架构:
- 存储层基于HDFS存储数据,提供容错机发制和高可靠性;
- 计算层提供灵活快速的水平扩展、负载均衡和故障恢复能力。
提供强一致语义,在CAP理论中属于CP系统。
注:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)
HBase与关系型数据库对比:
2. HBase的特点:
-
海量存储:Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
-
列式存储:这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
-
极易扩展:Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
-
高并发:由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。
-
稀疏:稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
HBase以列族组织数据,以行键索引数据。
- 列族需要在使用前预先创建,列名不需要预先声明,因此支持半结构化数据模型。
- 支持保留多个版本的数据,(行键+列族+列名+版本号)定位一个具体的值。
3.HBase使用场景:
Hbase是一个通过廉价PC机器集群来存储海量数据的分布式数据库解决方案。它比较适合的场景概括如下:
数据量是巨量大(百T、PB级别)
-
查询简单(基于rowkey或者rowkey范围查询)
-
不涉及到复杂的关联
1、用户对象 ⽐如⼤型的视频⽹站,电商平台产⽣的⽤户点击⾏为、浏览⾏为等等存储在HBase中为后续的智能推荐做数据⽀撑。
2、消息/订单存储 这个场景主要应⽤在电商平台,因为HBase提供了⼀个低延时、⾼并发的访问能⼒
3、对象存储 这⾥的对象存储实际是中等对象存储,是对HDFS存储⽂件的⼀个缓冲过度,因为如果我们⼤量的1M或2M这种⼩⽂件直接存储在HDFS上,会对 NAMENODE造成元数据维护的压⼒,所以在HBase中可以很好的做过度合并后在持久化到HDFS上。HBase提供了中等对现象的存储能⼒,中 等对象的⼤⼩范围在100k⾄10M之间。
4、时序数据 这⾥的时序数据是指随着时间⽽变化的数据,⽐如速度的展⽰,天⽓、温度、风速、车流量等等
5、Cube分析(KyLin) 通过KyLin将Hive或kafka中的数据,来构建Cube,这些Cube会存储在HBase中,以供其他的应⽤或其他的系统做实时查询或实时展⽰。
6、Feeds流 这个场景主要是应⽤在抖⾳、或其他⼩视频系统中,可以把Feeds流理解为⼀种内容聚合器,它可以帮助⽤户实时的获取最新的订阅源内容。