大数据基础2.8:HBase的架构细节
admin
2023-10-21 14:45:01
0

Master的作用

一句话:Master是管理者,不会做具体的任务负载,它的主要作用在于管理整个集群的小弟干好活即可

作用:

  • 监控RegionServer,处理RegionServer的故障转移
    RegionServer并不是100%稳定的,如果某个RegionServer出现问题。
    Master会将出问题的RegionServer的工作(数据、Region)转移到其它正常的RegionServer身上

    # 通俗理解
    一个小弟出问题了,领导将这个小弟的活,分配给其它小弟了。
  • 处理元数据的变更,比如Region(数据块)的分配和移除。
    Master和 Zookeeper通讯,去对整个HBase的元数据进行增删改查的操作
    # HBase的元数据是存在Zookeeper中的,路径是: /hbase
  • 数据的负载均衡
    Master会在空闲的时候,将任务的负载均衡的分配给各个RegionServer
    # 其实就是做Region(数据块)的平衡分配
    只有Master有权限去管理哪个RegionServer应该处理的数据块(Region)
  • 和Zookeeper通讯,去暴露自身的存在
    维护和临时节点的关系
    如果Master在某个时间 T 内,没有和ZK通讯
    Zk会认为这个Master宕机,解除它和临时节点的关系

    # T:超时时间,可以配置(默认15秒)

RegionServer的作用

RegionServer的作用就是:干活的

细节:

  • 托管分配给它的Region(数据块),去负责对应的数据工作(存、查、改、删)
  • 刷新内存缓存到HDFS形成HFile
  • 维护HLog(WALs)
  • 执行数据的压缩、region的分裂、HFile的合并等

Region



如图,HBase的表的数据,是分散在各个region内。

类比HDFS去理解:
  • HDFS的文件的数据,是分散在各个Block中
  • HBase的表的数据,是分散在各个Region内
  • HDFS的block由Datanode管理
  • HBase的Region有RegionServer管理

再来看RegionServer这个名字,就是Region的Server,Region服务器



如图,在HBase的16010页面中,可以看到表是有具体的region在线。



到这里为止,我们所了解到的HBase的架构是:
  • Master带RegionServer
  • RegionServer内包含具体的数据块(Region)

Rowkey和Region

? 我们的某一条数据,如何确定写入到哪一个Region中呢?
  1. 轮训写,不指定具体Region,基于数据平衡为基准写入到某一个region内
  2. 逮着一个可劲写,写到它不能存了为止,再换region接着写
  3. 每一个region都有自己的数据范围,数据根据rowkey来确定写入到哪个region内



如图(图片高清的保存在Day03文件夹中),我们上诉的三种设计最终第三种是最合适的。

region划分范围的意义

  1. HBase的表的region,如果划分了范围
  2. 在写入的时候,可以基于范围来确定写入到哪一个Region内
    可以相对均衡,是否均衡,取决于Region的范围(建表的时候的设计)是否可以让数据分散的比较彻底。
    设计的好,数据非常分散,设计的不好, 数据全挤到一堆。
  3. 在查询的时候,比如查询一条rowkey的数据,可以基于region的范围,快速锁定一个region
  4. 当你锁定一个Region的时候,剩余的Region全部排除
    比如,表有10TB数据,有10W个region
    当你单条查询的时候,可以锁定一个region,那么就排除了99999个region
    也就是排除了99.99999999%的数据
所以,这就是HBase随机查询能力非常恐怖的原因
不管你数据多大,10TB 、100TB 1000PB ,随意,只要region范围做的好
上来排除99.9999999%
在目前所有的大数据数据库中, 没有任何一个数据库,在数据量上升到TB级别后
能够在单条查询上性能超过HBase

小总结

截止到目前为止:

  1. HBase是Master带RegionServer
  2. RegionServer内管理一堆Region
  3. 每一个Region都有自己的范围(Rowkey的范围)(范围在ZK元数据中存储)


Region的范围是包头不包尾
比如范围是100~200
100>= Rowkey < 200(到200结束,不包含200本身)

Region范围的确定原则

有2个region:

  • region1:范围是100~300
  • region2的范围是:300~无穷大

问题:20000应该去region1还是region2

答案:去region1

原则:HBase的Rowkey,完全按照字符串(ASCII)码来进行比较大小

对于字符串,满足:

100 < 20000 < 300

字符串比较:

213 和33比较:33大,从第一位开始 2就输给3了

补充:字符串大小比较

在程序中(Java、Python、Scala、C、C++、GO)等等,字符串比较都是按照ASCII码来进行比较大小



字符串的比较是一位一位的比较,从前到后,只要有一位是大的,比较就结束

a 和 B谁大?

a的ASCII是97

B的ASCII是66

所以 a大于B


abc和 abe谁大?

a比较a 97比较97相等

b比较b 98比较98相等

c比较e 99比较101,e大

所以,abe大于abc


11和 2比较

第一位进行比较,1比较2,ASCII中49比较50,50比较大,2大于1

第一位2大于1,后面无需比较

最终:2大于11

相关内容