版权声明:原创作品转载必须标明出处,谢谢配合! https://blog.csdn.net/qq_38704184/article/details/84993534
Hbase的物理存储 HRegion1
- table中所有的行都是按照row key的字典序排序;
- table在行的方向上分割为多个HRegion;
- HRegion按大小分割的,每个表开始只有一个HRegion,随着数据增多,HRegion不断增大,当增大到一个阈值时候,HRegion就会等分为两个新的HRegion,之后会有越来越多的Region;
- HRegion是Hbase中分布式存储和负载均衡的最小单元,不同HRegion分不到不同的HRegionServer上。
Hbase的物理存储store1
- HRegion虽然是分布式存储的最小单元,但是并不是存储的最小单元;
- HRegion有一个或多个Store组成,每个Store保存一个column family;
- 所以,每个存储在HDFS上的一个单独文件中,空值不会被保存;
- 每个HRegion又有一个MemStore和0至多个StoreFile组成,StoreFile包含Hfile。
- MemStore存储在内存中,StoreFile存储在HDFS上。
Hbase基本组件
Client
包含访问Hbase接口,并维护cache来加快Hbase的访问,比如HRegion的位置信息。
HMaster
- 为HRegionServer分配HRegion:比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上;
- 负责HRegionServer的负载均衡;
- 发现失效的HRegionServer并重新分配其上的HRegion;
- 管理用户对table的增删改查操作;
- 管理namespace和table的元数据;
- 权限控制。
HRegionServer
- HRegionServer维护HRegion,处理对这些HRegion的IO 请求;
- 存放和管理本地HRegion;
- 读写HDFS,管理table中的数据;
- HRegionServer负责切分在运行过程中变得过大的HRegion;
- client直接通过HRegionServer读写数据
zookeeper
- 通过选举,保证任何时候,集群中只有一个master,master与regionServer启动时回想zookeeper注册
- 存储所有的Region的寻址入口;
- 实时监控RegionServer的上线和下线信息。并实时通知给master;
- 存储HBase的schema和table的元数据。
协同工作
- HBase client通过RPC方式和HMaster、HRegionServer通信。
- 一个HRegionServer可以存放1000个HRegion;
- 底层table数据存储于HDFS中,而HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化;
- 数据本地化并不是总能是按,比如在HRegion移动(入因split时,)需要等下一次compact才能继续回到本地化。
HLog
- 每个HRegionServer中都有一个Hlog对象,HLog是一个是按write ahead log的类;
- 在每次用户操作写入MEMstore的同时,也会写一份数据到HLog文件中;
- HLog文件定期会滚动出新的,并删除旧的文件(已经持久化到storeFile中的数据)
数据恢复恢复过程
- 当HRegionServer意外终止后,HMAster会通过zookeeper感知到;
- HMaster首先会处理遗留的HLog文件,将其中不同region的Log数据进行拆分,分别放到相应region的目录下
- 然后在将失效的region重新分配,领取导致和谐region的HRegionServer在loadregion的过程中,会发现有历史Hlog需要处理
- 因此会replay hlog中的数据到MEMStore中,然后flush到storefiles,完成数据恢复。
无master过程中,数据读取仍照常进行;
无master过程中,region切分、负载均衡等无法进行;
hbase写操作流程:
- client通过zookeeper的调度,向HRegionServer发送写数据的请求,在HRegion中写数据;
- 数据写到HRegion的MEMStore,直到MEMStore达到预设的阈值;
- 将MEMStore中数据会被flush成一个storeFile;
- 随着storeFile的数量的增多,当达到一定的阈值会触发compact合并操作,将多个storeFile合并成一个storeFile,同时把版本更新和数据删除;
- storeFile通过不断的compact合并,逐渐形成越来越多越大的storeFile;
- 单个storeFile大小超过一定的阈值,会触发split操作,把当前HRegion split成两个新的HRegion,老的HRegion就会下线,新生成的2个HRegion会被HMaster分配到其他的HRegionServer上,是的1个HRegion的压力分到2个HRegion上。
Hbase读操作:
- client访问zookeeper,查看ROOT表,获取Meta表的信息;
- 从meta表中查找,获取存放,目标数据的HRegion信息,从而找到HRegionServer的信息;
- 通过HRegionServer找到相应的数据信息
- HRegionServer的内存分为两部分MEMStore、blockcache;MEMStore主要用于写操作,blockcache只要用于读操作,请求先到memstore中数去数据,如果没有再到blockcache中读取,在没有就会到storeFile中读取,并把读取的数据信息放到blockcache中。