大数据(5b)HBase架构读写流程

Posted 小基基o_O

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据(5b)HBase架构读写流程相关的知识,希望对你有一定的参考价值。

架构

简单架构图

每个Region Server有多个Region
每个Region有多个Store
每个Store有多个StoreFile

详细架构图

StoreFile保存实际数据的物理文件
StoreFile以HFile的形式存储在HDFS上
StoreFile中的数据是有序的

MemStore写缓存
HFile中的数据 要求有序
数据会先存MemStore并排序,然后等待时机刷写到HFile
每次刷写都会形成一个新的HFile

写数据流程

  1. PUT
  2. 客户端访问Zookeeper
  3. Zookeeper返回信息:hbase:meta表位于哪个RegionServer
  4. 访问对应的RegionServer,获取hbase:meta表
  5. 根据读请求的namespace:table/rowkey,查询出目标数据位于哪个RegionServer中的哪个Region中
  6. 将该table的region信息以及meta表的位置信息缓存在客户端的MetaCache,方便下次访问
  7. 与目标RegionServer进行通讯
  8. 将数据顺序写入(追加)到WAL
  9. 将数据写入对应的MemStore,数据会在MemStore进行排序
  10. 向客户端发送ack
  11. 等到MemStore的刷写时机后,将数据刷写到HFile

WAL
数据要经MemStore排序后才能刷写到HFile,内存中的数据容易丢失
对此,数据会先写到Write-Ahead LogFile,然后再写入MemStore
在系统故障的时,可通过该日志文件重建数据

MemStore Flush

MemStore刷写时机说明
MemStore级别某个MemStore的大小达到(默认128M)
HRegion级别Region中所有MemStore总大小达到(默认512M)
HRegionServer级别RegionServer中所有MemStore总大小达到(默认 j a v a _ h e a p × 0.4 × 0.95 java\\_heap \\times 0.4 \\times 0.95 java_heap×0.4×0.95)
HLog级别当WAL文件的数量超过(默认32;新版已经废弃?)
定期刷写(默认1小时)
手动刷写flush 表名flush 区域名分别对一个或多个Region进行刷写

读数据流程

  1. GET:Table/RowKey
  2. 客户端访问Zookeeper
  3. Zookeeper返回信息:hbase:meta表位于哪个RegionServer
  4. 访问对应的RegionServer的hbase:meta表
  5. 根据读Table/RowKey查询出目标数据位于哪个RegionServer中的哪个Region中
  6. 将该table的region信息和meta表的位置信息缓存在客户端的MetaCache,以便下次访问
  7. 与目标RegionServer进行通讯
  8. 在BlockCache(读缓存)查询目标数据
  9. MemStore中查询目标数据,如果BlockCache中未查到相应数据则扫描对应的HFile文件,HFile中扫描到的数据块(默认64K)写入BlockCache,并将查到的 所有数据 进行合并
  10. 将合并后的最终结果返回给客户端

StoreFile Compaction(HBase文件合并精简)

en🔉cn
compactionkəmˈpækʃənn. 压紧;精简;密封;凝结
minorˈmaɪnəradj. 未成年的;次要的;较小的;n. 未成年人;vi. 辅修
majorˈmeɪdʒəradj. 主要的;重要的;主修的;n. [人类] 成年人;主修科目;vi. 主修

Region Split(Region切分机制)

以上是关于大数据(5b)HBase架构读写流程的主要内容,如果未能解决你的问题,请参考以下文章

大数据之Hbase:HBase之读写数据流程

HBase 架构详解及读写流程原理剖析

大数据—— HBase 常见面试题整理

第五章:大数据 の HBase 进阶

Hbase架构和读写流程

图文详解 HBase 的读写流程