Hbase 读书笔记——概述
bigtable:解决Google内部海量结构化数据的存储以及高效读写问题。
HBase是一个稀疏的、分布式的、多维排序的Map
1. 逻辑视图
- table:表,一个表包含多行数据。
2.row:行,一行数据包含一个唯一标识rowkey、多个column以及对应的值。
3.column:列,与关系型数据库中的列不同,HBase中的column由column family(列簇)以及qualif ier(列名)两部分组成, - timestamp:时间戳,每个cell在写入HBase的时候都会默认分配一个时间戳作为该cell的版本
- cell:单元格,由五元组(row, column, timestamp, type, value)组成的结构,其中type表示Put/Delete这样的操作类型,timestamp代表这个cell的版本
HBase的逻辑视图是比较容易理解的,需要注意的是,HBase引入了列簇的概念,列簇下的列可以动态扩展;另外,HBase使用时间戳实现了数据的多版本支持。
HBase这个Map系统却并不简单,有很多限定词——稀疏的、分布式的、持久性的、多维的以及排序的。
不同,HBase中Map的key是一个复合键,由rowkey、column family、qualif ier、type以及timestamp组成,value即为cell的值
<[rowkey,column family,qualifier,type,timestamp],cell value>
2.物理存储:
列簇式存储:从概念上来说,列簇式存储介于行式存储和列式存储之间
3. 体系结构
-
master-slave 架构
master节点,regionserver负责数据读写,hdfs存储数据。
*Hbase 客户端
a. HBase客户端(Client)提供了Shell命令行接口、原生Java API编程接口、Thrift/REST API编程接口以及MapReduce编程接口
b. HBase客户端访问数据行之前,首先需要通过元数据表定位目标数据所在RegionServer,之后才会发送请求到该RegionServer。同时这些元数据会被缓存在客户端本地,以方便之后的请求访问。如果集群RegionServer发生宕机或者执行了负载均衡等,从而导致数据分片发生迁移,客户端需要重新请求最新的元数据并缓存在本地。
Zookeeper
a.•实现Master高可用
b. 管理系统核心元数据
c. 参与RegionServer宕机恢复
d. 实现分布式表锁Master
Master主要负责HBase系统的各种管理工作
a. 处理用户的各种管理请求,包括建表、修改表、权限操作、切分表、合并数据分片以及Compaction等。
b. 管理集群中所有RegionServer,包括RegionServer中Region的负载均衡、RegionServer的宕机恢复以及Region的迁移等。
c. 清理过期日志以及文件,Master会每隔一段时间检查HDFS中HLog是否过期、HFile是否已经被删除,并在过期之后将其删除。RegionServer
RegionServer主要用来响应用户的IO请求,是HBase中最核心的模块,由WAL(HLog)、BlockCache以及多个Region构成。
a. WAL(HLog)
其一,用于实现数据的高可靠性,HBase数据随机写入时,并非直接写入HFile数据文件,而是先写入缓存,再异步刷新落盘。
其二,用于实现HBase集群间主从复制,通过回放主集群推送过来的HLog日志实现主从复制。
b. BlockCache:HBase系统中的读缓存
BlockCache缓存对象是一系列Block块,一个Block默认为64K,由物理上相邻的多个KV数据组成。BlockCache同时利用了空间局部性和时间局部性原理。
附近数据,和可能会再次访问的数据
c.Region:数据表的一个分片
4. Hbase优缺点
1.优点:
- 容量巨大:HBase的单表可以支持千亿行、百万列的数据规模,数据容量可以达到TB甚至PB级别
- 良好的可扩展性:HBase集群可以非常方便地实现集群容量扩展,主要包括数据存储节点扩展以及读写服务节点扩展
- 稀疏性:HBase支持大量稀疏存储,即允许大量列值为空,并不占用任何存储空间
- 高性能:HBase目前主要擅长于OLTP场景,数据写操作性能强劲,对于随机单点读以及小范围的扫描读,其性能也能够得到保证
- 多版本:HBase支持多版本特性,即一个KV可以同时保留多个版本,用户可以根据需要选择最新版本或者某个历史版本
- 支持过期:HBase支持TTL过期特性,用户只需要设置过期时间,超过TTL的数据就会被自动清理,不需要用户写程序手动删除。
- hadoop原生支持
2. 缺点:
HBase不能适用于所有应用场景
- HBase本身不支持很复杂的聚合运算(如Join、GroupBy等)
- HBase本身并没有实现二级索引功能,所以不支持二级索引查找
- HBase原生不支持全局跨行事务,只支持单行事务模型
作者:ZYvette
原文链接:https://www.jianshu.com/p/f9122c2dba9c