Hbase原理

2020-05-24  本文已影响0人  史鸿福

系统架构图


从HBase的架构图上可以看出,HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,接下来介绍他们的作用

.META.:记录了用户所有表拆分出来的的 Region 映射信息,.META.可以有多个 Regoin

-ROOT-:记录了.META.表的 Region 信息,-ROOT-只有一个 Region,无论如何不会分裂

2、Client 访问用户数据前需要首先访问 ZooKeeper,找到-ROOT-表的 Region 所在的位置,然 后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次 网络操作,不过 client 端会做 cache 缓存。

  1. ZooKeeper 为 HBase 提供 Failover 机制,选举 Master,避免单点 Master 单点故障问题
  2. 存储所有 Region 的寻址入口:-ROOT-表在哪台服务器上。-ROOT-这张表的位置信息
  3. 实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master
  4. 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family
  1. 为 RegionServer 分配 Region
  2. 负责 RegionServer 的负载均衡
  3. 发现失效的 RegionServer 并重新分配其上的 Region
  4. HDFS 上的垃圾文件(HBase)回收
  5. 处理 Schema 更新请求(表的创建,删除,修改,列簇的增加等等)
  1. RegionServer 维护 Master 分配给它的 Region,处理对这些 Region 的 IO 请求
  2. RegionServer 负责 Split 在运行过程中变得过大的 Region,负责 Compact 操作

可以看到,client 访问 HBase 上数据的过程并不需要 master 参与(寻址访问 zookeeper 和 RegioneServer,数据读写访问 RegioneServer),Master 仅仅维护者 Table 和 Region 的元数据信息,负载很低。
.META.存的是所有的 Region 的位置信息,那么 RegioneServer 当中 Region 在进行分裂之后 的新产生的 Region,是由 Master 来决定发到哪个 RegioneServer,这就意味着,只有 Master 知道 new Region 的位置信息,所以,由 Master 来管理.META.这个表当中的数据的 CRUD
所以结合以上两点表明,在没有 Region 分裂的情况,Master 宕机一段时间是可以忍受的。

读流程

  1. 客户端通过 ZooKeeper 以及-ROOT-表和.META.表找到目标数据所在的 RegionServer(就是 数据所在的 Region 的主机地址)
  2. 联系 RegionServer 查询目标数据
  3. RegionServer 定位到目标数据所在的 Region,发出查询请求
  4. Region 先在 Memstore 中查找,命中则返回
  5. 如果在 Memstore 中找不到,则在 Storefile 中扫描 为了能快速的判断要查询的数据在不在这个 StoreFile 中,应用了 BloomFilte
    BloomFilter,布隆过滤器:迅速判断一个元素是不是在一个庞大的集合内,但是他有一个 弱点:它有一定的误判率

写流程

  1. Client 先根据 RowKey 找到对应的 Region 所在的 RegionServer
  2. Client 向 RegionServer 提交写请求
  3. RegionServer 找到目标 Region
  4. Region 检查数据是否与 Schema 一致
  5. 如果客户端没有指定版本,则获取当前系统时间作为数据版本
  6. 将更新写入 WAL Log
  7. 将更新写入 Memstore
  8. 判断 Memstore 的是否需要 flush 为 StoreFile 文件。
上一篇 下一篇

猜你喜欢

热点阅读