《HBbase原理与实践》读书笔记
第1章 HBase概述
1.1 HBase前生今世
1.google 的 三篇论文
GFS - HDFS
MapReduce - MapReduce
BigTable - Hbase
2.0.98版本 Hbase历史上最稳定的版本
1.2 HBase数据模型
sparse, distributed,persistent multidimensional sorted map
稀疏的 分布式的 持久性的 多维度的 排序的 Map
逻辑上: Hbase的数据是以表形式进行组织的, 表由 行列构成。
物理上: Hbase是一个map, 是一个 稀疏的、分布式的、持久的多维度排序的Map
1.2.1 逻辑视图
table: 表,一个表包含多行数据
row : 行,一行数据包含一个唯一表示rowkey, 多个cloumn及对应的值。 row 按照rowkey的字典顺序由小到大排列
cloumn: 列, 由 cloumn family(列族) : qualifier (列名)。列族需要在创建表的时候指定, 一个cloumn family 包含多个 qualifier
timestamp: 时间戳,每个cell 默认分配一个时间戳 作为该cell 的版本, timestamp越大 版本号越大 越新
cell : 单元格 由五元组构成 (rowkey, cloumn,timestamp,type,value).(rowkey, cloumn,timestamp,type) 是K, value 是 V
Hbase引入列族, 列族下的列可以动态扩展; timestamp 实现了数据的多版本支持。
1.2.2 多维度稀疏排序Map
多维: hbase 是一个map,kv结构, k 是由多个维度构成的 (rowkey, cloumn,timestamp,type)
稀疏:空值无需填充,理论上无需填充
排序:不仅仅rowkey按照字典排序 而是 先比较rowkey 字典序小到大 再 cloumn(cloumn family:qualifier)小到大 再是 timestamp 大到小
1.3 HBase 体系结构
Master-slave模型: 一个Master节点 多个RegionServer节点 ;
数据存储在HDFS;zookeeper协助Master 对集群管理
1.client
提供shell命令行结构,原生java APi编程接口, Thrift/REST API接口 、MR接口
2.zookeeper
①实现Master的高可用:如果master宕机,通过选举制度选出新的master
②管理核心元数据:管理正常RegionServer集合、保存元数据表hbase:metabase所在的RegionServer地址。 (元数据表在hbase 的 hbase命令空间)
③参与RegionServer宕机恢复:zk通过心跳感知Regionserver 是否宕机,通知master 进行宕机处理
④实现分布式锁: 对一张表操作是 需要先加锁。zk通过特定的机制实现分布式锁
3.Master
master主要负责管理请求
①处理用户的各种管理请求:表的DDL、切分表、合并数据分片、compaction
②管理RegionServer
③清理过期日志 文件
4.RegionServer
主要负责用户的IO请求 由WAL(Hlog 是WAL的核心实现类)、BLockCache、多个Region
①WAL:预写日志(写缓存)。两大作用
a.实现数据的高可用:写数据时,先写顺写WAL,如果数据丢失 可以通过Hlog恢复
b.集群间的主从复制
②BlcokCache:读缓存
客户端从磁盘读取数据后 会将数据放入blcokcache 后续访问 就先从blockcache读取数据;默认大小64k
利用了空间局部性 和 时间局部性
空间局部性:最近读取的kv数据很可能与当前读取的kv数据在地址上是相近的,缓存block 而不是缓存单个kv 可以实现空间局部性
时间局部性:一个数据正在被访问,近期它还有可能被再次访问
BlcokCache 两中实现:LRUBlockCache 和 BucketCache
③Region
数据表的分片,数据表的大小超过一定阈值就会 "水平切分",是集群负载均衡的基本单位
一张表的region会分布在多台RegionServer上,一台RegionServer管理多个Region(一般来自不同的数据表)
store
一个Region由一个或者多个store构成,有多少个column family 就有多少 store
每个store 由一个MemStore 和 多个 Hfile构成
数据写入MemStore 写满了 开始异步的将数据flush成 一个 Hfile;
当HFile 越来越多后 会执行Compact操作,将小文件合并成一个或者多个大文件