ITPub博客

首页 > 大数据 > Hadoop > hbase 的架构分析

hbase 的架构分析

Hadoop 作者:mcxiaoracle 时间:2022-09-18 21:40:55 0 删除 编辑

hbase 架构分析:


大:一个表可以有上亿行,上百万列。

面向列:面向列簇的存储和权限控制,列簇独立检索。

稀疏:对于空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

无模式(no Schema):每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。

数据多版本:每个单元格中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。


数据类型单一:HBase中的数据都是字节数组,没有类型。


HBase架构组件

Region Server:提供数据的读写服务,当客户端访问数据时,直接和Region Server通信。

HBase Master:Region的分配,DDL操作(创建表,删除表)。

Zookeeper:是HDFS的一部分,维护一个活跃的集群状态。


Hadoop DataNode存储着Region Server管理的数据,所有HBase数据存储在HDFS文件系统中,

Region Server在HDFS DataNode中是可配置的,并使数据存储靠近在它所需要的地方,就近服务,当往HBase写数据时Local,但是当一个region被移动之后,HBase的数据就不是Local的,除非做了压缩(compaction)操作。

NameNode维护物理数据块的元数据信息。

HBase Table 通过rowkey range 的范围被水平切分成多个Region,一个Region包含了所有的,在Region开始键和结束之内的行,Regions被分配到集群的节点上,成为Region Servers,提供数据的读写服务,一个region server 可以服务1000个Region。


Region的分裂策略

egion中存储的是一张表的数据,当region中的数据条数过多的时候,会直接影响查询效率。当region过大的时候,region会拆分为两个region,HMaster会将分裂的region分配到不同的region server上,这样可以让请求分散到不同的Region Server上,已达到负载均衡,这也是HBase的一个优点。


当region中最大的store大小超过某个阈值(hbase.hregion.max.filesize=10G)之后就会触发切分,一个region等分为2个region。


但是在生产线上这种切分策略却有相当大的弊端(切分策略对于大表和小表没有明显的区分):


阈值(hbase.hregion.max.filesize)设置较大对大表比较友好,但是小表就有可能不会触发分裂,极端情况下可能就1个,形成热点,这对业务来说并不是什么好事。

如果设置较小则对小表友好,但一个大表就会在整个集群产生大量的region,这对于集群的管理、资源使用、failover来说都不是一件好事。



Compaction操作

指选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,在这个过程中不会处理已经Deleted或Expired的Cell。一次 Minor Compaction 的结果是更少并且更大的StoreFile。



Zookeeper 协调器

??Zookeeper一般在分布式系统中的成员之间协调共享的状态信息,Region Server和活跃的HMaster通过会话连接到Zookeeper,Zookeeper维护短暂的阶段,通过心跳机制用于活跃的会话。

有一个特殊的HBase目录表叫做Meta表,它拥有Region在集群中的位置信息,Zookeeper存储着Meta表的位置。


如下就是客户端首次读写HBase 所发生的事情:

客户端从Zookeeper的Meta表中获取Region Server。

客户端将查询 META 服务器,获取它想访问的相对应的Region Server 的行键,客户端将这些信息以及META表的位置信息。

客户端将从相应的Region Server获取行。

META 表 集群中所有Region的列表


META 表像是一个B树

META 表结构为:

Key:region start key,region id

Values:Region Server

HBase Region 刷新(Flush)

??当MemStore 积累到足够的数据,则整个排序后的集合被写到HDFS的新的HFile中,每个列簇使用多个HFiles,列簇包含真实的单元格,或者是键值对的实例,随着KeyValue键值对在MemStores中编辑排序后,作为文件刷新到磁盘上。


??注意列簇是有数量限制的,每一个列族有一个MemStore,当MemStore满了,则进行刷新。它也会保持最后一次写的序列号,这让系统知道直到现在都有什么已经被持久化了。


??最高的序列号作为一个meta field 存储在HFile中,来显示持久化在哪里结束,在哪里继续。当一个region 启动后,读取序列号,最高的则作为新编辑的序列号。







https://blog.csdn.net/hujieliang123/article/details/123193751




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2915157/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Storm大数据位置
请登录后发表评论 登录
全部评论
数据方向,了解oracle ,IBM DB2 730

注册时间:2019-09-30

  • 博文量
    286
  • 访问量
    226552