@
目录
- 底层原理
- Master架构
- RegionServer架构
- Region/Store/StoreFile/Hfile之间的关系
- 写流程
- 写缓存刷写
- 读流程
- 文件合并
- 分区
- JAVA API编程
- 准备
- 示例
文章插图
- Meta 表格介绍:全称 hbase:meta,只是在 list 命令中被过滤掉了,本质上和 HBase 的其他表格一样,不要去改这个表 。
- RowKey:([table],[region start key],[region id]) 即 表名 , region 起始位置和 regionID 。
- 列:
- info:regioninfo 为 region 信息,存储一个 HRegionInfo 对象 。
- info:server 当前 region 所处的 RegionServer 信息,包含端口号 。
- info:serverstartcode 当前 region 被分到 RegionServer 的起始时间 。
- 如果一个表处于切分的过程中,即 region 切分,还会多出两列 info:splitA 和 info:splitB , 存储值也是 HRegionInfo 对象,拆分结束后,删除这两列 。
- 注意:在客户端对元数据进行操作的时候才会连接 master , 如果对数据进行读写,直接连接zookeeper 读取目录/hbase/meta-region-server 节点信息,会记录 meta 表格的位置 。直接读取即可,不需要访问 master,这样可以减轻 master 的压力,相当于 master 专注 meta 表的写操作,客户端可直接读取 meta 表 。
- 在 HBase 的 2.3 版本更新了一种新模式:Master Registry 。客户端可以访问 master 来读取meta 表信息 。加大了 master 的压力,减轻了 zookeeper 的压力 。
- HMaster通常部署在NameNode上,HMaster中主要有负载均衡器,元数据表管理器,预写日志管理器(MasterProcWAL) 。
文章插图
- MemStore:写缓存,由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到达刷写时机才会刷写到 HFile,每次刷写都会形成一个新的 HFile , 写入到对应的文件夹 store 中 。
- WAL:由于数据要经 MemStore 排序后才能刷写到 HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入 MemStore 中 。所以在系统出现故障的时候 , 数据可以通过这个日志文件重建 。
- BlockCache:读缓存,每次查询出的数据会缓存在 BlockCache 中,方便下次查询 。
文章插图
- Region
- table在行的方向上分隔为多个Region 。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上 , 但同一个Region是不会拆分到多个server上 。
- Region按大小分隔,表中每一行只能属于一个region 。随着数据不断插入表,region不断增大 , 当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region 。
- Store
- 每一个region有一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个ColumnFamily建一个store(即有几个ColumnFamily , 也就有几个Store) 。一个Store由一个memStore和0或多个StoreFile组成 。
- HBase以store的大小来判断是否需要切分region 。
- MemStore
- memStore 是放在内存里的 。保存修改的数据即keyValues 。当memStore的大小达到一个阀值(默认64MB)时 , memStore会被flush到文件 , 即生成一个快照 。目前hbase 会有一个线程来负责memStore的flush操作 。
- StoreFile
- memStore内存中的数据写到文件后就是StoreFile(即memstore的每次flush操作都会生成一个新的StoreFile),StoreFile底层是以HFile的格式保存 。
- HFile
- HFile是HBase中KeyValue数据的存储格式 , 是hadoop的二进制格式文件 。一个StoreFile对应着一个HFile 。而HFile是存储在HDFS之上的 。HFile文件格式是基于Google Bigtable中的SSTable,如下图所示:
文章插图
首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo 。Trailer中又指针指向其他数据块的起始点 , FileInfo记录了文件的一些meta信息 。
写流程
推荐阅读
- 玩魔方的秘诀(十大诡异魔方)
- 巧用VBA实现:基于多个关键词模糊匹配Excel多行数据
- 影驰1650ultra大将oc怎么样_影驰1650ultra大将oc性能测评
- 小米11价格大概多少_小米11上市时间及价格
- JuiceFS 元数据引擎选型指南
- 原神草神最新表情包有哪些-原神草神最新表情包大全分享2022
- 盗墓长生印最佳队伍是什么-盗墓长生印最佳队伍推荐大全攻略
- 详解ROMA Connect API 流控实现技术
- 世界十大顶级面料:全球十大顶级男装面料排行榜 你知道哪些?
- 王者荣耀露娜怎么玩(王者露娜连招张大仙)