Spark实战—— (2.1) HBase表格结构、物理存储结构与系统架构

1. HBase简介

1.1 HBase是什么?

HBase,即Hadoop DataBase,是Hadoop的一个子项目,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是Google Bigtable的开源实现。

HBase在Hadoop生态中的位置如下[1]——

  • 使用HDFS作为其分布式存储系统,提供了高可靠的底层存储支持
  • 使用MapReduce来处理海量数据,提供了高性能的计算能力
  • 使用Zookeeper提供协同/协调服务,提供了稳定服务和failover机制(故障切换)
1.2 列式存储与行式存储

上面说到HBase是基于列列式数据库,而常用的关系数据库则是行式数据库,此处对两个概念做简单区分。

行式存储是指数据以为单位进行存储,同一的数据在存储介质中连续,如Oracle、Mysql、Sql Server

列式存储是指数据以为单位进行存储,同一的数据在存储介质中连续,如HBase、HP vertica等分布式数据库

行式存储适合处理OLTP,对实时性要求较高的应用,如ATM系统——

  • INSERT/UPDATE容易,适合随机数据的增加和删除
  • 适合需要获取行中所有属性的查询操作
  • 数据量很大时且没有索引时,需要大量IO(如只需要查询两列,但仍然要把每一行都读出来)
  • 建立索引等提高性能的操作花时间、占空间

列式存储适合处理OLAP,实时性要求不高,但数据量大——

  • 每一列都可以作为索引进行查询
  • 查询时只有涉及的列被读取
  • 各列独立存储,可根据每一列的实际情况进行压缩,节省存储空间
  • 查询时对各个列并行查询,再进行组合(查询示意图如下)
  • INSERT/UPDATE比较麻烦,不适合需要频繁更新的应用

2. HBase表格结构

HBase的表格中涉及到几个概念,用一个例子来解释,这一部分看了很多博客,其中HBase概念及表格设计解释得很通俗,可以看一下。

HBase中一个可能的表格如下,包括:

  • RowKey:行键,类似关系表中的主键,是用来表示唯一一行记录的主键,按字典序排列
  • Column:列,类似关系表中的列,在下图中的列就是Gender,Age,Province,City
  • ColumnFamily:列族,是列的集合,不同的列族存储在不同文件中,引入这个概念是因为HBase查询中,很多情况下不需要一行中所有的列
  • Cell:单元格,由【RowKey、Column】确定的单元格,如下图中的Male,20...
  • TimeStamp:数据修改时加入的时间戳,下图中作为单独一列,实际上这个值是存放在单元格中的,见下面的例子

HBase的表数据内部用Map实现[5],如上图用字典/JSON形式可表示如下:

{"Mike":{
    "BasicInfo":{
        "Gender":{"T1":"Male"}, 
        "Age":{"T1":"20"}
    },
    "AddressInfo":{
        "Province":{"T1":"GuangDong"},
        "City":{"T1":"Guangzhou"}
    }
 },
 "Amy":{
     "BasicInfo":{
         "Gender":{"T2":"Female"}, 
         "Age":{"T2":"18"}
     },
     "AddressInfo":{
         "Province":{"T2":"GuangDong"},
         "City":{"T2":"Shenzhen"}
     }
 }
}

假设将Mke的Age改为21,在HBase中会保留数据的若干版本,由时间戳区分,可把表格看成如下形式:

用字典/JSON形式表示如下,可以看到实际上只在第四行发生了改变,即在Age中增加了一个键值对

{"Mike":{
    "BasicInfo":{
        "Gender":{"T1":"Male"}, 
        "Age":{"T1":"20", "T3":"21"}
    },
    "AddressInfo":{
        "Province":{"T1":"GuangDong"},
        "City":{"T1":"Guangzhou"}
    }
 },
 "Amy":{
     "BasicInfo":{
         "Gender":{"T2":"Female"}, 
         "Age":{"T2":"18"}
     },
     "AddressInfo":{
         "Province":{"T2":"GuangDong"},
         "City":{"T2":"Shenzhen"}
     }
 }
}

所以实际上,上述表在HBase中的逻辑表示如下,一个单元格包含数据的若干个版本,是【时间戳:值】的列表

综上,在HBase中,一个表就是一个高维、稀疏、有序的Map表。

关于HBase的基于的列式存储,实际上说基于列族更合适——

  • 在HBase中不同的列族存储在不同文件中,同一列族的数据在存储介质上连续
    比如上面的表,在HBase中存储大致如下:
Mike - BasicInfo:Gender - T1:Male
Mike - BasicInfo:Age - T1:20
Mike - BasicInfo:Age - T3:21
Amy - BasicInfo:Gender - T2:Female
Amy - BasicInfo:Age - T2:18
Mike - AddressInfo:Province - T1:GuangDong
Mike - AddressInfo:City - T1:Guangzhou
Amy - AddressInfo:Province - T2:GuangDong
Amy - AddressInfo:City - T2:Shenzhen

3. HBase物理存储结构

对HBase的表,物理存储结构如下:

  1. 一个表由很多行Row组成,按照RowKey的字典序排列
  2. 在行的方向上,一个表会被划分为Region,即一个Region是若干行
    • 一开始只有一个Region,当Region增大到一个阈值时,等分为两个Region
    • Region是分布式存储的最小单元,即一个Region不会拆分到不同节点上
  3. Region由一个或多个Store组成,每个Store存储一个ColumnFamily
  4. Store由一个MemStore若干个StoreFile组成
  5. StoreFileHFile的轻量级封装,HFile就是实际的存储文件,存储着键值对(HFile内部结构可参考HBase基本概念与基本使用

4. HBase系统架构

4.1 重要文件

HBase里有几个重要的文件,简单介绍如下:

  1. HLog,每次写操作都会在HLog中记录,当有节点宕机时可以恢复
  2. META表,记录所有的Region的元数据,即位置等信息,当Region数量很多时,META表也会分成多个Region
  3. ROOT表,记录META表所有Region的元数据,ROOT表始终只有一个Region,ROOT表的位置保存在zookeeper中,如下[4]
4.2 架构

HBase的架构如下[4]

Client

  1. 使用HBase RPC机制与HMaster和HRegionServer进行通信

HMaster

  1. 为HRegionServer分配Region
  2. 负责HRegionServer的负载均衡
  3. 当有HRegionServer失效或Region等分时,决定将Region分配到哪些节点
  4. GFS的垃圾回收

HRegionServer

  1. 维护Master分配的Region,处理对这些Region的IO请求
  2. 切分在运行过程中变得过大的Region

zookeeper

  1. (运行多个HMaster,)使用master选举机制保证有且只有一个HMaster
  2. 存储ROOT表的位置
  3. 实时监控HRegionServer的状态(HRegionServer将自己注册到zookeeper),将上线下线通知给HMaster
4.3 Region定位

在查询过程中,需要根据RowKey定位到Region的位置,具体定位方式如下:

  1. Client从zookeeper中获取ROOT表的位置
  2. Client查ROOT表,获取META表的位置(网络通信)
  3. Client查META表,找到RowKey所在Region的位置(网络通信)
  4. Client访问具体的Region,获取数据(网络通信)

如上,在没有缓存的情况下,需要三次网络通信。

实际上,访问ROOT表和META表时会进行缓存,查询时会先在缓存中寻找Region、META表或ROOT表。

当所有缓存都丢失/被覆盖时,需要6次网络通信,前三次用于发现三个缓存都丢失,后三次即为上述的三次。

关于HBase的读写细节,可以参考Hadoop相关知识整理系列之一:HBase基本架构及原理

以上,对HBase表格的逻辑结构、表格的物理存储结构与HBase的系统架构做了简单介绍,主要是对HBase框架有一个整体的理解,更为细节的部分可以参考在下面的一些博客中。

Reference

  1. 《百度百科》- HBase
  2. 几张图看懂列式存储(转)
  3. 数据库为什么会分为“行式存储”和“列式存储”呢?
  4. Hadoop相关知识整理系列之一:HBase基本架构及原理
  5. HBase概念及表格设计
  6. HBase基本概念与基本使用
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云大规模结构化云存储HBase是一个分布式、可扩展和高可靠的NoSQL数据库系统。它基于Hadoop分布式文件系统(HDFS)构建,主要用于存储和管理海量结构化数据。 HBase架构是由多个组件组成的。首先是RegionServer,它是HBase的核心组件之一,负责管理和存储一部分数据,每个RegionServer可以管理多个Region。Region是HBase中最小的数据单元,一个被分割成多个Region并在不同的RegionServer上存储。这种分布式的存储方式使得HBase能够水平扩展,处理海量数据。 另一个重要组件是HMaster,它负责协调和管理整个集群中的RegionServer。HMaster维护了整个HBase集群的元数据,包括结构、Region的分布等信息。 HBase还有一个重要的组件是Zookeeper,用于保存HBase集群的状态信息和一致性协调。Zookeeper能够监控和管理HBase集群的变化,保证数据的一致性和可靠性。 HBase的存储基于HDFS,数据被分割成多个块并在HDFS的不同节点上存储。HBase使用Hadoop中的块缓存来优化读取性能,并且支持数据的压缩和版本控制。 HBase提供了高性能的读写操作,能够快速处理大规模结构化数据。它支持强一致性的读写操作,并且还提供了快速的随机访问能力。 总结来说,阿里云大规模结构化云存储HBase采用分布式架构,能够处理海量结构化数据。通过多个组件的协同工作,HBase实现了高可靠性、可扩展性和高性能的存储和管理功能。它在大数据环境中得到广泛应用,并为用户提供了强大的数据存储和处理能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值