Hbase架构图
hbase主要包含管理集群或者表信息的Master节点,真正服务客户端读写服务的RegionServer节点,已经用于分布式协调服务的zookeeper节点组成,参见如下架构图:
Hbase中Master节点的作用包括:创建表,修改表元数据,以及维持整个集群中RegionServer节点上Region的负载均衡。
Hbase的RegionServer节点包括:服务客户端的IO读写请求
zookeeper的作用除了让Master可以监控到RegionServer的宕机事件外,他还存储一份告诉客户端元数据表对应的RegionServer地址的信息,这样客户端通过和zk通信获取到元数据表所在的RegionServer节点后,可以到具体的RegionServer节点中获取元数据表,然后再根据元数据表中的数据分布信息去其他的RegionServer中完成对应的读写操作
Hbase的数据存储格式
常见的数据存储分成两种:
一. 行式存储格式,关系型数据库中广泛使用的数据存储格式,也就是数据记录一行接着一行存储,想要读取某一列的数据需要读取所有的行,然后丢掉不需要的列
二.列式存储,类似Parque文件格式,或者clickhouse的存储格式一样,数据记录按照每列的数据进行存储,由于每列数据相似性很高,所以按照列式存储的数据压缩率非常可观,缺点是获取一行数据需要读取所有的列
那Hbase使用哪一种存储格式呢,答案是介于两者之间,按照列簇存储。
Hbase对于每个列簇使用单独的文件存储,每个列簇的记录单独存放在一起,不同列簇的数据记录存放到不同的文件中
具体存放的记录格式如下所示:
其实由hbase的记录存储格式我们可以知道,hbase是一个KV存储的数据库,它擅长于通过key查找对应的value,当然它也可以适合应用于小范围的key扫描获取value的列表.本质上他就是KV存储的NoSql数据库。