Hbase的体系结构

Hbase的体系结构

在这里插入图片描述

1. Client : hbase客户端,

包含访问hbase的接口。比如,linux shell,java api。
除此之外,它会维护缓存来加速访问hbase的速度。比如region的位置信息。

2. Zookeeper :

监控Hmaster的状态,保证有且仅有一个活跃的Hmaster。达到高可用。
它可以存储所有region的寻址入口。如:root表在哪一台服务器上。
实时监控HregionServer的状态,感知HRegionServer的上下线信息,并实时通知给Hmaster。
存储hbase的部分元数据。
Zookeeper虽然是自成一家的第三方组件,不属于Hbase体系,但是Zookeeper在Hbase中的重要性甚至超过了Master。因为你读取数据所需要的元数据表hbase:meata的位置存储在Zookeeper上。

3. HMaster :

  1. 为HRegionServer分配Region(新建表等)。
  2. 负责HRegionServer的负载均衡。
  3. 负责Region的重新分配(HRegionServer宕机之后的Region分配,HRegion裂变:当Region过大之后的拆分)。
  4. Hdfs上的垃圾回收。
  5. 处理schema的更新请求

4. HRegionServer :

  1. 维护HMaster分配给的Region(管理本机的Region)。
  2. 处理client对这些region的读写请求,并和HDFS进行交互。
  3. 负责切分在运行过程中组件变大的Region。

5. HLog :

  1. 对HBase的操作进行记录,使用WAL写数据,优先写入log(put操作:先写日志再写memstore,这样可以防止数据丢失,即使丢失也可以回滚)

    作用:实现了高可靠性。

6. HRegion :

1.它是表或者表的一部分。
2 HBase中分布式存储和负载均衡的最小单元
3 当region达到阀值时,进行切分,形成两个等分新region,父region失效
由hmaster重新分配给regionserver,尽可能达到负载均衡

理解
一个表按rowkey来切割 是有序的 每一个表都是有范围的 区域
字节数组
一个表被分成多个region ,region和regionserver 是多对多关系

一个Region代表的是一张 Hbase表中特定Rowkey范围内的数据,
而Hbase是面向列存储的数据库,所以在一个Region中,有多个文件来存储这些列。
Hbase中数据 列是由列簇来组织的,所以每一个列簇都会有对应的一个数据结构,
Hbase将列簇的存储数据结构抽象为Store,一个Store代表一个列簇。

7. Store :

  1. 相当于一个列簇

理解:
Store中
每一次的插入操作都会先进入MemStore(内存缓冲区),
当 MemStore达到上限的时候,Hbase会将内存中的数据输出为有序的StoreFile文件数据(根据Rowkey、版本、列名排序,这里已经和列 簇无关了因为Store里都属于同一个列簇)。
这样会在Store中形成很多个小的StoreFile,当这些小的File数量达到一个阀值的时 候,Hbase会用一个线程来把这些小File合并成一个大的File。
这样,Hbase就把效率低下的文件中的插入、移动操作转变成了单纯的文件输出、 合并操作。

由上可知,在Hbase底层的Store数据结构中,
每个StoreFile内的数据是有序的,
但是StoreFile之间不一定是有序的,
Store只 需要管理StoreFile的索引就可以了。
这里也可以看出为什么指定版本和Rowkey可以加强查询的效率,因为指定版本和Rowkey的查询可以利用 StoreFile的索引跳过一些肯定不包含目标数据的数据。

8. Memstore :

  1. 内存缓冲区,用于将数据批量刷新到hdfs中,默认大小为128M
    一个特殊的内存,未持久化或者未达到阀值时,用于存储客户端的写数据 并对已经存在的数据,进行排序。
    达到阀值后,将数据封装成storefile对象,然后调用hdfs的客户端接口,将数据持久化,生成Hfile
    清空内存,
    为后续的写操作腾出空间
    所以:和file会有多个

9. StoreFile :

  1. 和HFile概念意义,不过是一个逻辑概念。HBase中的数据是以HFile存储在Hdfs上
    其regionserver 会调用hdfs的接口 去存储

10.HFile

当MemStore满了之后,Hbase就会在HDFS上生成一个新的Hfile,然后把Memstore中的内容写入到这个HFile中。因此HFile会随着数据的增减而有多个。

为了提高性能,Hbase没间隔一段时间或者文件大小达到阀值后,都会进行一次合并,合并的对象就是HFile文件。当合并成一个HFile时,会忽略掉DELETE类型的记录,从而达到了删除的目的,并对剩下的数据做排序和版本合并。形成一个大的HFile,当Hfile的大小达到需要切分的阀值时,会等分为两个HFile。。

11.HDFS:

Hadoop的一部分,Hbase并不直接跟服务器的硬盘交互,而是跟HDFS交互,所以HDFS是真正承载数据的载体。

hbase基于hdfs

相同列族的数据存放在一个文件中。
[表数据的存储目录结构构成]
hdfs://s201:8020/hbase/data/${名字空间}/${表名}/${区域名称}/${列族名称}/${文件名}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值