主从架构:HmasterHRegionServer
协调服务Zookeeper协调hmaster与hregionServer
底层hbase数据存储hbase文件中
Client与zookeeper和hregionServer交互不与Hmaster交互类似于hdfs
namenode和datanode
客户端Client:
整个hbase集群的入口进行表的增删查改操作入口与zookeeper进行一系列的的交互
使用hbase
rpc机制与hmaster、hregionServer进行通信
与hmaster通信进行管理类的操作
与hregionserver通信进行读写类的操作表的交互
包含访问hbase的接口,并维护cache加快对hbase的访问,与hregionServer交互
协调服务zookeeper
保证任何时候,集群中只有一个master HA解决单节点故障
存储所有region的寻址入口
实时监控Region server的上线和下线信息并实时通知给master
存储hbase的schema和table元数据
Hbase主节点Hmaster
通过zookeeper选举机制解决单节点故障问题
管理用户对表table的增删改查操作主要是针对表的管理不是表数据的管理
管理HregionServer的负载均衡和调整Region的分布
在Region Split(扩大)后,负责新Region的分配
Hmaster失效仅会导致所有元数据无法被修改,表的数据读写还是可以正常进行
RegionServer节点:
维护Hregion并往HDFS中写数据
当表的大小超过设置时候,split HRegion
在Hregion Server停机后,负责失效HregionServer上的Region迁移
Hbase与Zookeeper
Hbase元数据存储在zookeeper中
默认情况下,Hbase(自带zookeeper,生产环境中一般使用外置通用的的zookeeper)管理Zookeeper的实例比如启动或停止zookeeper
Zookeeper解决Hbase单点故障问题zookeeper选举机制
Hmaster与HregionServer启动时会向Zookeeper注册
Zookeeper文件->root表信息(0.96后不存储root表信息)->meta Data->user Table
寻找RegionServer过程:
Zookeeper(读取zookeeper找到root表位置) ->
Root (root表包含meta表所在的region列表该表只会有一个Region
zookeeper中记录了root的location)
Meta(meta表包含所有用户控件region列表以及RegionServer服务器的地址)
用户表
Client第一次操作后,会将root meta缓存到本地不需要再访问zoookeeper
Hbase容错:
Master容错:zookeeper重新选择一个新的master
无master过程中,数据读取照常进行客户端读取数据无需经过hmaster
无master过程中,region切分、负载均衡等无法进行
RegionServer容错:定时向zookeeper汇报心跳如果一段时间未出现心跳,master将该RegionServer的region重新分配到其他RegionServer
失效服务器上的预写日志由主服务器进行分割并派送给新的RegionServer
Zookeeper容错:zookeeper高可靠的服务不存在单点故障
HBase数据存储:
HLog HFileStoreFile是对HFile做一层封装
插入一条数据写两份文件一个是HLog文件二进制日志文件
Region文件,内存中写数据-memstore文件达到一定大小后StoreFile文件
Hbase中所有数据文件都存储在hadoop
hdfs文件系统上,格式主要有:
HFile:Hbase中keyValue数据的存储格式,Hfile是hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile
HLogFile:Hbase中WAL write
ahead log的存储格式,物理上是hadoop的sequence file带项目符号的内容。在机器学习的迭代计算中非常有优势
Delete是针对数据打上标签,后期进行compactor时候,再进行删除操作。
不是立即删除。
Log flusher -> HLog线程同步
HRegionServer:
其管理一些列Hregion对象
每个HRegion对应Table中一个Region,HRegion由多个HStore组成
每个HStore对应Table中一个Column Family的存储
Column Family就是一个集中地存储单元,将具有IO特性的Column放在一个Column
Family会更高效
版本合并和数据删除:删除的数据是客户端打了标签的数据,即之前delete的数据。
Hbase的写操作非常快,直接往内存中写数据。
所有的更新和删除操作都是在conpact阶段做的。
StoreFile文件结构:
StoreFile以HFile格式保存在HDFS上
Data Block段-保存表中的数据,可以被压缩
Meta block段可选,保存用户自定义的kv对,可以被压缩
File info段,HFile的元信息,不压缩用户也可以在这一部分添加自己的元信息
Data block index段– data block索引,每条索引的key是被索引的block的第一条记录的key
Meta block index段meta block索引
Trailer定长保存每一段的偏移量
类似于Mysql的banglog用于做灾难恢复集群挂了下次启动根据日志恢复