HBase架构基础和结构模型

文章博客地址

1. HBase 定义

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。

2. HBase 数据模型的定义

  1. Name Space
        命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。 HBase有两个自带的命名空间,分别是 hbasedefaulthbase 中存放的是 HBase 内置的表(meta等),default 表是用户默认使用的命名空间。

  2. Region
        类似于关系型数据库的概念。不同的是, HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着, 往 HBase 写入数据时,字段可以动态按需指定。因此,和关系型数据库相比, HBase 能够轻松应对字段变更的场景(默认当数据大于10g时候开始切分数据为一个Region)
         HBase 表会根据 RowKey 值被切分成不同的 region 存储在 RegionServer中,在一个 RegionServer 中可以有多个不同的 region。同一个行键的 Region 不会被拆分到多个 Region 服务器上。 一个HBase表被划分成多个Region,开始只有一个Region,后台不断分裂。

  3. Row
        HBase 表中的每行数据都由一个 RowKey (行键)和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要

  4. Column
        HBase 中的每个列都由 Column Family(列族)Column Qualifier(列限定符) 进行限定,例如 info: name, info: age。建表时,只需指明列族,而列限定符无需预先定义。

  5. Time Stamp
        用于标识数据的不同版本(version), 每条数据写入时, 如果不指定时间戳, 系统会自动为其加上该字段,其值为写入 HBase 的时间(客户端操作系统时间需要和linux系统时间保持一致,否则会出现很多麻烦的问题)。
    时间戳工具网站

  6. Cell
        实际存储数据的地方,由{rowkey, column Family: column Qualifier, time Stamp} 唯一确定的单元。 cell 中的数据是没有类型的,全部是字节码形式存贮。

3. HBase 逻辑结构

    HBase表由组成,每个行由行键(row key)来标识,列划分为若干列族,一个列族中可以包含任意多个列同一个列族里面的数据存储在一个文件中。当这个文件达到一定大小后,会进行分裂形成多个region。当一个行键不同的列族中都有相应的列值的话,不同列族中的文件都会存储这个行键的值
    总的来说,一行可能包含多个列族,一个列族有多个列,对某一行而言,某列族文件中只存储了这一行键在列族中有值的那些列(列族可能有上百个列),没有不会存储(不存null)。

下图为一个Name Space 的逻辑结构

在这里插入图片描述

  1. :相当于mysql的字段。建表时,只需指明列族,而列限定符无需预先定义。字段可以动态按需指定。
  2. 列族 :建表时需指定,其中的列可以动态扩展,列族存在于linux系统的不同文件夹下(一个列族可以视为一个文件夹)
  3. Row key :行键。数据是按照 RowKey的字典顺序存储的,并且查询数据时需要根据 RowKey 进行检索。
  4. Region :类似于关系型数据库的概念(默认当数据大于10g时候开始切分数据为一个Region)。
  5. Store :数据实际存储的地方(其实是图中不包含Row key列的深绿色区域)

4. HBase 物理存储结构

当在t4时间put(插入)row_key1的phone数据时,原来t3的并不会马上被覆盖。当查询row_key1的phone时会返回时间戳最大的t4那一个数据(最新的)。

5. HBase 系统架构


Hbase 是由 ClientZookeeperMasterHRegionServerHDFS 等几个组件组成,HBase依赖于ZooKeeperHDFS

  • Zookeeper :HBase 通过 Zookeeper 来做 master 的高可用(通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异常,会通过竞争机制产生新的 master 提供服务。)、RegionServer 的监控(通过 Zoopkeeper 来监控 RegionServer 的状态,当 RegionSevrer 有异常的时候,通过回调的形式通知 Master RegionServer 上下线的信息)、元数据的入口以及集群配置的维护等工作。

  • Region Server :Region Server 为 Region 的管理者, 其实现类为 HRegionServer,主要作用如下:
    对于数据的操作: get, put, delete;
    对于 Region 的操作: splitRegion、 compactRegion。
    功能概括如下: 管理 master 为其分配的 Region,处理来自客户端的读写请求 ,负责和底层 HDFS 的交互(存储数据到 HDFS),负责 Region 变大以后的拆分,负责 Storefile 的合并工作 ,刷新缓存到HDFS,维护Hlog

  • master :Master 是所有 Region Server 的管理者,其实现类为 HMaster,主要作用如下:
    对于的操作: create, delete, alter;
    对于 RegionServer的操作:监控 RegionServer,为 RegionServer 分配 Region(维护整个集群的负载均衡,在空闲时间进行数据的负载均衡 ) ,维护集群的元数据信息,处理 region 的分配或转移(发现失效的 Region,并将失效的 Region 分配到正常的 RegionServer 上 ;当 RegionSever 失效的时候,协调对应 Hlog 的拆分)

  • HDFS :HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用(Hlog 存储在HDFS)的支持。
    功能概括如下:提供元数据和表数据的底层分布式存储服务,保证的高可靠和高可用性 (数据多副本)

  • MemStore :内存缓存,达到一定缓存大小或者时间节点触发一次 flush,文件系统中生成新的 HFile,每次 Flush 的最小单位是 Region。每个 列族(Column family)维护一个 MemStore。
    MemStore介绍

  • Write-Ahead logs(又名WAL,Hlog) :当对 HBase 写数据的时候,数据会在内存MemStore中保留一段时间,MemStore达到一定的数据量(时间以及数据量阈值可以设定),数据再写进磁盘。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中,所以在系统出现故障的时候,数据可以通过这个日志文件重建。
    HBase WAL简介
    HFile与HLog结构解析

  • Store :HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。

  • HFile :这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile 是以 Hfile的形式存储在 HDFS 的。

  • Meta表(元数据表) :描述HBase表的表。有了 Region 标识符,就可以唯一标识每个 Region。为了定位每个 Region 所在的位置,可以构建一张映射表。映射表的每个条目包含两项内容,一项是 Region 标识符,另一项是 Region 服务器标识。这个条目就表示 Region 和 Region 服务器之间的对应关系,从而就可以使用户知道某个 Region 存储在哪个 Region 服务器中。这个映射表包含了关于 Region 的元数据,因此也被称为“元数据表”,又名“Meta表”。

6. HBase读写流程

continued.jpg

文中资料链接: 尚硅谷HBase教程(hbase框架快速入门)
参考博客:HBase简介

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值