hbase原理
hbase是hadoop的数据库,主要用来存储数据,其存储数据的文件的格式是文档,基础是hdfs,数据存储在hdfs上,但是自己管理。
hbase物理架构体系
hbase主要由HMaster和RegionServer组成。
HMaster:是hbase集群的主节点,但是其可以有多个,用于高可用集群,当主节点不能工作时,可以使用其他的hmaster进行替换。
功能:监控regionserver,处理regionserver的负载均衡,故障转移
处理元数据的变更,通过zookpr把自己的位置信息告诉客户端。
RegionServer:regionserver其实是hbase的服务,部署在一台服务器上。
一个regionserver包含一个WAL(日志文件),一个BlockCache(读缓存),和多个region
一个region包括多个store(存储区),每一个store对应一个列簇
一个store包含多个storefile和一个MemStore组成。
一个storefile包含一个hfile,对应一个列簇
hfile和WAL作为序列文件保存在hdfs上。
功能:与客户端进行交互,负责管理维护region和存储hbase的实际数据。处理分配给他的region,刷新缓存到hdfs中,维护Hlog
执行compaction,负责处理region分片
Client
整合HBase集群的入口
使用HBase RPC机制与HMaster和HRegionserver通信
与HMaster通信进行管理类的操作
与HRegionserver通信进行读写类操作
包含访问hbase 的接口,client 维护着一些cache 来加快对hbase 的访问,比如regione 的位置信息
Zookeeper
保证任何时候,集群中只有一个running master,Master与RegionServers启动时会向ZooKeeper注册默认情况下,HBase 管理ZooKeeper 实例,比如,启动或者停止ZooKeeperZookeeper的引入使得Master不再是单点故障
存贮所有Region 的寻址入口
实时监控RegionServer 的状态,将Regionserver 的上线和下线信息,实时通知给Master
存储Hbase的schema和table元数据
hbase工作流程
客户端首先与zookeeper建立联系,Hmaster在zookeeper上注册,留下自己的位置信息,当向hbase发出读写请求,获取meta表所在的rs时,此时zookeeper向客户端返回meta表所在的rs,客户端接收到,根据获得rs的meta表的位置,去相应的rs中读取meta数据,然后在相应的rs中进行数据的读写操作。
主要流程为:
hmaster根据表的大小以及负载均衡等条件,分配region给regionserver,regionserver打开region,并创建Hregion实例,它会为每个表的HColumnFamily(用户创建表时定义的列簇)创建一个Store实例,每个Store实例包含一个或多个StoreFile实例。是实际数据存储文件HFile的轻量级封装,每个Store会对应一个MemStore。写入数据时数据会先写入Hlog中。成功后在写入MemStore中。Memstore中的数据因为空间有限,所以需要定期flush到文件StoreFile中,每次flush都是生成新的StoreFile。HRegionServer在处理Flush请求时,将数据写成HFile文件永久存储到HDFS上,并且存储最后写入的数据序列号。
region和table
1.table中的所有行都是按照rowkey的字典排序
2.table在行的方向上分割为多个Region
3.Region按大小分割,每个表开始只有一个region,随着数据增多,region不断增大,但到达阈值时,region就会分割成两个新的region,因此region会越来越多。
4.region是hbase中分布式存储和负载均衡的最小单元,不同的regioon分布到不同的regionserver上,但Region不会拆分到不同的Region Server上。
Table 在行的方向上分割为多个HRegion,一个region由[startkey,endkey)表示
Region是分布式存储的最小单元,但不是存储的最小的单元。
- region由一个或多个Store组成,每个Store保存一个columnfamily
- 每个Store又由一个memStore和0个或多个StoreFile组成
- memStore存储在内存中,StoreFile存储在HDFS上
Table中Region内部结构
1.一个表会按照行(看数据量)划分为若干个region每一个region分配给一台特定的regionserver管理
2.每一个region内部还要依据列族划分为若干个HStore
3.每个HStore中的数据会落地到若干个HFILE文件中
4.region体积会随着数据插入而不断增长,到一定阈值后会分裂
5.随着region的分裂,一台regionserver上管理的region会越来越多
6.HMASTER会根据regionserver上管理的region数做负载均衡
7.region中的数据拥有一个内存缓存:memstore,数据的访问优先在memstore中进行
8.memstore中的数据因为空间有限,所以需要定期flush到文件storefile中,每次flush都是生成新的storefile
9.storefile的数量随着时间也会不断增加,regionserver会定期将大量storefile进行合并(merge)