概述
分布式非关系型数据库
列存储
可以存储大数据量
数据最后是落盘到hadoop上,廉价,便于横向拓展
存储半结构化数据不浪费空间。
没有主键的概念,行键Rowkey代替主键
数据写入不是覆盖,而是记录一个新的VERSION,默认显示最新VERSION的数据
namespace下有default和hbase两个自带的属性空间,hbase不要动,表默认写入default中。
集群搭建
自己练习中,搭建完全分布式zookeeper, 启动一台hadoop伪分布式+hbase
sh hbase
zookeeper充当注册中心的作用。HMaster通过zookeeper监控HRegionServer.
HMaster
负责管理HRegionServer, HRegion由哪个HRegionServer管理。
负责DDL操作(会产生元数据的操作, DML不产生元数据,不进过HMaster. 产生元数据的操作即使对表的操作,create drop disable)
HMaster实时监控zookeeper上/backup-master,判断Backup master是否改动。
先注册的hmaster会变成active, 其他变成backup.
sh hbase-daemon.sh start master
因为要实时监控,一般不超过3个
列存储
写入数据的时候,行存储数据是连续的,只要尾部追加,而列存储需要多少寻址。行比列快.
读取的时候。 整表读与写类似,行快。字段读的时候,列快。
实际生产中,字段读更多。
HRegion
HRegion超过10G,会分裂,变成2个G,分裂出去的HRegion会有新的HRegionServer管理。
HRegionServer
管理HRegion, 1个HS可以管理1000个。
- WAL:写-日志
防止数据丢失
达到1G会滚动,产生新的WAL,旧的变成old WAL,一定时间后被清理 - blockCache - 数据块缓存
本质上是读缓存
局部性原理:时间局部性,空间局部性。
(LRU:移除最长时间没用的) - memStore - 本质上是写缓存
设置memStore提高写的效率(因为在内存中)
冲刷条件:
> 1.达到128M冲刷
> 2.WAL滚动时
> 3. (所有memStore占内存)/(总内存) = 35%, 会冲刷至小于35% - HFile(storeFile)
落户到hadoop的block中
Compation机制
minjor compact:相邻的合并。小的合成一个大的,大的不参与合并。
major compact: 所有HFile全部合并成1个
布隆过滤器
HFile判断数据是否存在的方法
利用3个哈希函数对一个值映射。映射到0表示一定没有。
不能判断一定有!
读/写
查找HRegionServer的流程如下:
老版本中-ROOT-管理.meta,还多一步查找-ROOT-目前被废除。
-ROOT-被废除的原因(点击查看)
写:
请求写入WAL,再写入memstore
读:
先读blockCache,没有再读memStore,
再读HFile(storeFile), 先用行键筛选,再对剩余的文件用布隆过滤器筛选。
补充
删除表之前要先禁用表
disable 'person'
drop 'person'
建表的时候设置最多获取的版本数据
create 'person', {NAME=>'basic', VERSIONS=>3}, {NAME=>'info', VERSIONS=>5}
get 'person', 'p1', {COLUMN=>'basic:age', VERSIONS=>3}