Hbase存储设计
在Hbase中,表被分割成多个更小的块然后分散的存储在不同的服务器上,这些小块叫做Regions,存放Regions的地方叫做RegionServer。Master进程负责处理不同的RegionServer之间的Region的分发。在Hbase实现中HRegionServer和HRegion类代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,还处理两种类型的文件用于数据存储
- HLog 预写日志文件,也叫做WAL(write-ahead log)
- HFile 真实的数据存储文件
文章图片
image 在读数据的时候,客户端首先连接到ZooKeeper上面,然后查找"hbase:meta"表的位置,客户端查询"hbase:meta"表然后找到对应rowKey的Region,然后Region和RegionServer的信息缓存到客户端,在接下来的交互中就无需再次连接查询"hbase:meta"表了,如果缓存过期之后,客户端会发起一个新的查询,然后再缓存到本地。
Hlog(WAL)
在写数据的时候,数据首先被写到日志文件中(write-ahead log),然后写到MemStore中。直接写到MemStore很有可能导致数据丢失的问题,因为它存储在内容中。一旦MemStore满了,MemStore的内容就会刷新到磁盘中的HFile文件中。
在发生故障的时候,WAL的作用就显示出来了。因为WAL存储在HDFS上面,一般会有多份的复制,任何一个服务器有复制的WAL都可以使用。
Hlog类代表的是WAL,当构造HRegion对象的时候,Hlog的作为构造参数传递进去。在更新数据的时候,它直接保存数据到共享的WAL中,同时跟踪每一次编辑的序列化的改变。WAL使用Hadoop SequenceFile,存储记录为键值对。HLogKey作为Key,看下图为存储的键值对。
文章图片
image HFile
Hfile代表真实的数据存储文件,这个文件包含不同数量的数据块和固定数量的文件信息块。索引块记录数据和元数据块的偏移量,每一个数据块包含魔数头和许多的KeyValue实例。
文章图片
image 【Hbase存储设计】在Hbase中,每一个表都有它默认的目录,位于数据的/default目录,这个目录通过hbase.rootdir配置,每一个table目录包含一个文件叫做.tableinfo在.tabledesc目录下,.tableinfo目录存储表的元信息,例如表和列簇(HTableDescriptor类序列化)。
参考
- HBase不睡觉书
- [Hbase Essential]
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 爱琐搭配(喜欢复古、冷淡,像这种双环设计的气质耳环)
- 别墅庭院设计,不同的别墅庭院设计也给人视觉上完全不一样的!
- 数据库设计与优化
- 设计模式-代理模式-Proxy
- [译文]Domain|[译文]Domain Driven Design Reference(四)—— 柔性设计
- 《精进》读书笔记(四十八)
- 产品设计的简化
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计