分布式非关系型数据库 列存储 可以存储大数据量 数据最后是落盘到hadoop上,廉价,便于横向拓展 存储半结构化数据不浪费空间。
没有主键的概念,行键Rowkey代替主键 数据写入不是覆盖,而是记录一个新的VERSION,默认显示最新VERSION的数据 namespace下有default和hbase两个自带的属性空间,hbase不要动,表默认写入default中。
自己练习中,搭建完全分布式zookeeper, 启动一台hadoop伪分布式+hbase sh hbase
zookeeper充当注册中心的作用。HMaster通过zookeeper监控HRegionServer.
负责管理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超过10G,会分裂,变成2个G,分裂出去的HRegion会有新的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中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}