回答三个问题:
1.HBase是做什么的?
2.HBase和其他数据库有什么区别?
3.HBase的包含什么模块,它的结构是什么样子?
HBase是做什么的?
hbase官网
通过构建一个表,来实现随机实时读写HDFS
支持大表:10亿行级别和100万列级别表。
随机访问
实时读写
分布式(强一致性读写,自动恢复)
多版本
高并发(存疑)
非关系型
HDFS支持随机访问吗?
HDFS文件不支持随机写入,只支持追加写。(HDFS部分学习)
HDFS支持实时读写吗?
HDFS不支持低延时的数据访问。
非关系型,就是不存在固定的表结构。(not only sql)
根据不能支持就加一层的思路,HBase肯定是在HDFS上面加了一些东西,从而支持了上述的特点。在官网介绍上,还没有看到高并发的论述,这里先存一个疑。
HBase和其他数据库有啥区别
数据块存储结构
存储结构:B树,LSM树。
B树的结构式B树做索引,行存做存储。特点在于读快写慢
LSM树,推迟和批量修改。先写到内存中,然后flush到磁盘,到一定的情况下,再进行合并优化读性能。
HBase的优势和Hadoop紧密绑定,它的高可拓展性,可以在保证数据一致性的同时,提供高性能。
这点先这么看吧,和hdfs紧密绑定,咋紧密了,别的就不可以读写hdfs了吗?主要应该是扩展性好吧?生态好吧?
MongoDB,Cassandra之后学习了再对比~
HBase使用场景
数据量大,否则没有发挥分布式的优势。
没有RDBMS要求,比如事务,二级索引,高级查询语言。(这部分要看看phoenix)
HBase数据模型
为了支持HBase功能,需要在数据结构和模块上进行设计。
HBase Data模型
逻辑视图
表结构
物理视图
物理上也是一个k-v结构,key是row key + time stamp + column family + type + column value是内容,一个列簇存到一起。
NameSpace
用来对逻辑上的db进行分组,从而可以进行多租配额,访问控制,RS隔离等。
Versions
用来支持多版本,log类型的。存储时需要倒序排列。
ACID
HBase支持行更新的原子性。
支持Read Commit隔离级别
HBase模块组成
CataLog Table
也是一个hbase的表,k-v结构,作用是快速通过table的rowkey信息,定位到region,regionServer信息,regionServer进行读写操作。
key
table,region start key,region id
value
info: regioninfo 序列化的RegionInfo信息
info: server
info: serverstartCode
表的region如果变大,需要分裂,这时候value会增加分裂后的字段。
啥时候失效更新?如何更新?
HBase客户端
提供接口,JAVA API,Thrift Rest API,Map Reduce接口
支持DML,DDL操作
HBase读取数据时,先定位RegionServer,然后发送请求到RegionServer。这里面需要一个索引来定位,这个索引就是元数据。
如果元数据失效了,那么就直接访问meta表。
为了提高写效率,支持批量和缓存。
为了提高读效率,支持filter。
Master
作用是处理RegionServer接口,元数据变动。
region assingn,server crash,balance等都需要Master参与。
RegionServer
服务和管理Region,一般和datanode放一起。
协处理器,regionServer上执行用户的代码。
Region
存储列簇(Column Family),可用性和分布式的基本元素。
一个regionServer管理20-200个region,每个region(5-20Gb)
Region数不能太多的原因:
region读写需要缓存;
可能master负载高;
影响MR tasks个数。
Zookeeper
Master高可用
hbase:meta存储
RegionServer宕机恢复
分布式锁
【下一个小节装一个hbase单机版】