欢迎投稿

今日深度:

Hbase的读写流程,一个HRegions

Hbase的读写流程,一个HRegions


查看hbase基本介绍的参考hbase的基本介绍和表模型
#博学谷IT学习技术支持#

1.hbase的逻辑结构

2.hbase的物理结构

3.hbase的集群架构


主节点HMaster的作用:

  • 管理众多从节点
  • 用于分配region给从节点
  • 负责元数据管理操作

从节点HRegionserver的作用:

  • 管理众多从节点
  • 用于分配region给从节点
  • 负责元数据管理操作

Hbase集群中可以有多个Hmaster(一主多备)和多个HRegionserver组成。
一个HRegionserver由一个HLog和多个Region组成,一个Region由Stroe模块组成,一个Store模块由一个Mem Store和多个StoreFile组成。

StoreFile
保存实际数据的物理文件,StoreFile 以 HFile 的形式存储在 HDFS 上。每个 Store 会有一个或多个 StoreFile(HFile),数据在每个 StoreFile 中都是有序的。

MemStore
写缓存,由于 HFile 中的数据要求是有序的,所以数据是先存储在 MemStore 中,排好序后,等到达刷写时机才会刷写到 HFile,每次刷写都会形成一个新的 HFile。

WAL
由于数据要经 MemStore 排序后才能刷写到 HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入 MemStore 中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

集群结构中的Region和Store模块与逻辑架构的类比:

Region模块:
类似与表中的横向切割,是以row key按照排序从小到大居中分割的。
Store模块:
类似与表中的纵向切割,是列族为单位切割的。
一个表可以被分成多个region,这些region可以被不同的RegionServer管理,这样可以起到分布式的作用,提高并发能力;一个region可以包括多个Store模块。

4.Hbase的读取数据流程

  • 1 客户端发起读取数据的请求, 首先会先连接zookeeper

  • 2从zookeeper中获取一个 hbase:meta表 被那个RegionServer所管理着
    hbase:meta: hbase的元数据表, 在这个表中存储了自定义的表相关元数据, 包含: 表名, 表有那些列族, 表有几个Region构成的, 每个Region被那个RegionServer管理meta表只有一个Region, 而这个Region必然会被某一个RegionServer所管理, 至于被那个RegionServer所管理了呢?
    zookeeper清楚
    从zookeeper中的/hbase/meta-region-server获取hbase:meta表所在的节点:

    图中看出hbase:meta表在node2节点上。

  • 3 连接meta表对应RegionServer, 从meta表获取当前要读取的这个表对应的Region是那些, 并且这些Region对应的RegionServer是谁当表有多个Region的时候: 如果执行的Get操作获取某一条数据, 只会返回一个RegionServer的地址;如果执行的Scan操作, 会将所有的Region对应RegionServer地址全部返回。
    例如:查找TRANFER_RECORD表所在HRegionServer位置:

    其中红框中的表示TRANFER_RECORD表所在HRegionServer位置为node3.

  • 4连接要读取表对应的RegionServer, 从RegionServer上开始获取数据即可:
    读取顺序:
    MemStore —> blockCache(缓存) —> StoreFlie(小HFile) —>大HFile
    当从后续的文件中读取到数据后, 会将这一部分存储到缓存中
    如果执行Scan操作, blockCache基本没有太大意义

整个读取过程, Master是否有参与呢?
Master是不参与数据读取操作。

5.写入数据流程

  • 1 由客户端发起写入数据的请求, 首先会先连接zookeeper
  • 2 从zookeeper中获取 hbase:meta表 被那个regionServer所管理
  • 3 连接meta表对应的RegionServer地址, 从meta表获取当前要写入的表对应region被那个RegionServer所管理(一般只会返回一个RegionServer地址, 除非一次性写入多条数据)
  • 4连接对应要写入RegionServer的地址, 开始写入数据, 将数据首先会写入到HLog中,然后将数据写入到对应Region的对应Store模块的MemStore中(有可能会写入到MemStore), 当这两个地方都写入完成后, 客户端认为数据写入完成了
    服务端写入过程: 异步操作(可能客户端执行N多次写入后, 服务端才开始对之前的数据进行操作)
  • 5 随着客户端不断的写入操作, memstore中数据会越来越多, 当内存中数据达到阈值(128M / 1h)后, 就会触发flush刷新机制, 将数据<最终>刷新到HDFS上形成StoreFile(小Hfile)文件.
  • 6 随着不断的刷新, 在HDFS上StoreFile文件会越来越多, 当StoreFlie文件数量达到阈值(3个及以上)后, 就会触发compact合并压缩机制, 将多个StoreFlie文件<最终>合并为一个大的HFile文件
  • 7随着不断的合并, 大的HFile也会越来越大, 当大HFile达到一定的阈值(<最终>10GB)后, 就会触发Split分裂机制, 将大HFile进行一分为二,形成两个新的大HFile, 同时管理这个大HFile的Region也会形成两个新的Region, 形成的两个新的Region和两个新的大HFile 进行一对一的管理即可, 原来的Region和原来的大的HFile就会下线删除掉。

www.htsjk.Com true http://www.htsjk.com/hbase/45646.html NewsArticle Hbase的读写流程,一个HRegions 查看hbase基本介绍的参考hbase的基本介绍和表模型 #博学谷IT学习技术支持# 1.hbase的逻辑结构 2.hbase的物理结构 3.hbase的集群架构 主节点HMaster的作用 管理众多...
评论暂时关闭