目录
一、特点
二、适用场景
三、架构原理
四、写过程
五、读过程
放大观看!
一个冷门知识点:Hbase的名字的来源是 Hadoop database
一、特点
大:一个表可以有上十亿行,上百万列
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
二、适用场景
快速读写,快速简单检索、基于HDFS的海量数据存储
支持随机读写
更新实际上是多版本新增
不支持标准sql,需要集成Phoenix插件
三、架构原理
RowKey,一级索引
仅能通过主键(row key)和主键的 range 来检索数据
Client维护着一些cache来加快对hbase的访问
Zookeeper
master选举
存贮所有Region的寻址入口
实时监控Region Server的状态,通知Master
HMaster
HDFS上的垃圾文件回收
处理schema更新请求
集群管理
为Region server分配region
负责region server的负载均衡
发现失效的region server并重新分配其上的region
不参与表数据IO的过程
离线后:表的数据读写还可以正常进行
HMaster只维护表和region的元数据
维护不是存储
离线后:无法创建删除表,无法修改表的schema,无法进行HRegion的负载均衡,无法处理HRegion 上下线,无法进行HRegion的合并,唯一例外的是HRegion的split可以正常进行,因为只有HRegion Server参与
Client访问HBase上数据的过程并不需要HMaster参与
访问控制、磁盘和内存的使用统计都是在列族层面进行的。列族越多,在取一行数据时所要参与IO、搜寻的文件就越多,所以,如果没有必要,不要设置太多的列族。
数据版本回收
HRegionServer
HRegionServer中有基于LRU的Block Cache机制
Table 在行的方向上分割为多个 HRegion。
HRegion按大小分割的(默认10G)
HRegion 是 HBase 中分布式存储和负载均衡的最小单元
不同region属于不同table
HRegion 由一个或者多个 Store 组成,每个 Store 保存一个 Column Family。
每个 Strore 又由一个 MemStore 和0至多个 StoreFile 组成。
位于内存的 Memstore 和位于硬盘的 StoreFile。
HLog(WAL log)
Write ahead log
Hlog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。
每个Region Server维护一个Hlog,而不是每个Region一个
如果一台region server下线,为了恢复其上的region,需要将region server上的log进行拆分,然后分发到其它region server上进行恢复
三个重要机制
memstore flush机制
storeFile compact机制
HRegion split机制
默认一个HFile达到10Gb的时候就会进行切分
四、写过程
特点
Hbase会对表中的数据按照rowkey排序(字典顺序)
设计Key时考虑存储位置相关性
行的一次读写是原子操作 (不论一次读写多少列)
1.访问zookeeper,找到Meta表,确定当前将要写入的数据所对应的HRegion和HRegionServer服务器。
2.向该HRegionServer服务器发起写入数据请求,然后HRegionServer收到请求并响应。
3.先把数据写入到HLog,以防止数据丢失。2.接着写入 Memstore.3.当 Memstore 中的数据量达到某个阈值,HRegionServer 启动 FlashCache 进程写入 StoreFile,每次写入形成单独一个 StoreFile
如果HLog和Memstore均写入成功,则这条数据写入成功
查时,先在memstore找,找不到再找storefile
Storefile多,会触发Compact合并操作
Storefile大,Region大,达到阈值后,会触发Split操作,将Region一分为二
StoreFile是只读的,一旦创建后就不可以再修改。因此HBase的更新其实是不断追加的操作。
五、读过程
查询能力
通过单个row key访问
通过row key的range
全表扫描
1.访问zookeeper,从zookeeper里面获取meta表所在的HRegionServer
2.访问Meta表所在的HRegionServer,从而读取到Meta,进而获取到Meta表中存放的元数据。
3.扫描所在HRegionServer的Memstore和Storefile来查询数据。



