hbase的体系结构
client:
提供了访问hbase的各种接口
维护了一个缓存,缓存最近的访问记录,用来加快访问hbase
zookeeper:
监控hMaster,保证有一个活跃的节点来管理整个集群
实时监控HregionServer的状态,并将其通知给HMaster
存储hbase的元数据信息,比如meta,meta-region-server表
HMaster
负责对region的切分,分配
负责regionServer的负载均衡
负责客户端的schema请求
负责hdfs上的垃圾回收
HRegionServer
负责本机region的管理
真正负责客户端的读写请求
负责与hdfs上进行交互
Hlog
记录下客户端的所有请求,防止机器宕机,可以进行回滚操作
格式是WAL格式
region
region是hbase的最小存储单元,可以是一张表,也可以是一张表的一部分
region的名字是由rowkey的行范围来进行标识的
store
region又被划分为很多的store,store对应的是一个列族,也是hdfs下的一个目录,所以不同列族下的数据在不同的文件目录下面
里面维护了一个memStore
memStore
写入数据真正进行操作的地方,数据写入后会进行对rowkey的排序,通过rowkey的(长度,时间)等进行排序
memestre有一个阈值,阈值是内存的40% 或者一小时 或者128M
StoreFile
当mem达到阈值,就会flush成一个storefile,所以storefile有很多个,当达到一定的数量阈值之后,就会对storefile进行合并操作,去掉过多的版本号,以及标记要删除的值
storefile也有一个阈值为10G,当达到阈值10G,就会造成storefile的切分,storefile的切分也会造成region的切分,将一个region切分成两个新的region,一个旧的region下线,两个新的region上线
hbase的存储机制:
1.region是hbase的最小的存储单位,region是一张表,也可以是一张表的一部分,region的名字是由rowkey的行范围来进行划分的
2.region里面维护了很多的store,store对应一个列族,也对应hdfs上的一个存储的目录,store里面维护了一个memstore
3.memstore是真正对数据进行操作的地方,memstore会对写入的数据进行rowkey的排序,根据rowkey(长度,版本戳)等进行拍序,memestore有一个阈值是128M或者内存的40%或者一小时
4.当memestore达到阈值,就会将数据flush成一个个storefile,所以storefile就会有多个,当达到一定的数量的阈值,就会进行store file的合并操作,过滤掉版本号过多的单元格,以及标记删除的单元格,当达到阈值10G就会造成storefile的切分,storefile的切分会引起region的切分,将一个旧的region切分成两个新的region,一个旧的region下线,两个新的region上线
5.最后flush成hfile保存在hdfs上
hbase的写流程
1.client通过zookeeper的调度,想hmaster发出请求,请求在region写入数据
2.数据被写入到region中的memstore中知道memestore达到阈值128M或者1小时或者内存的40%
3.memestore达到阈值flush成storefile,所以storefile有多个,当达到一定的数量阈值就会进行合并操作,将过多的版本号,以及标记要删除的rowkey过滤掉
4.storefile会随着时间越来越大,当到达阈值10G,就会造成storefile的切分,storefile的切分就会引起region的切分,一个旧的region切分成两个新的region,旧的region下线,两个新的region上线
5.最后形成hfile持久化存储在hdfs上面
布隆过滤器:
原理:布隆过滤器是一个由64kb的初始权威0的位数组和n个hash函数组成的,每存入一个值就会对这个值进行n的hash函数的运算,运算之后得到n个下标,将这些得到的下标值全都赋值为1
用处:当要检查一个值是否在这个region中的时候,我们就可以通过n个hash函数的计算,得到n个下标,在数组中进行判断,如果这n个下标中有一个是0,这个值一定不在这个region中,如果这n个下标都是1,这个值也不一定在这个region中
rowkey的设计原则:
1.唯一性原则(避免出翔覆盖)
2.长度一致原则(避免出现排序异常)
3.散列原则(避免热点key问题) 将设计的rowkey进行反转
4.加盐方式(在rowkey前面加随机字符串)