Hbase存储方式

Hbase是一个分布式的列式存储数据库,适用于存储非结构化和半结构化的松散数据。它通过Row Key进行数据检索,具备列簇概念,支持行级别的数据访问。Hbase的表由RowKey、Column Family、Column、Timestamp和Cell组成,其架构包括Client、Zookeeper、Master、RegionServer和Region。RegionServer维护region,处理IO请求,并根据需要进行region的分裂和合并。HLog提供Write Ahead Log功能,确保数据在故障后的恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hbase概念

HBase是一个分布式的,面向列的数据库它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

  Hbase中的表一般有这样的特点:

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

  2 面向列:面向列(族)的存储和权限控制,列(族)独立检索。

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

Hbase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)

Row Key与nosql数据库们一样,row key是用来检索记录的主键。访问Hbase table中的行,只有三种方式:

  1 通过单个row key访问

  2 通过row key的range

  3 全表扫描

Hbase列式存储的概念:

       列簇(多个数据列的组合),HBase表中的每个列都归属于某个列簇

  列簇是表的schame的一部分,但是列并不是

     创建表时,需要给出列簇的名称,不需要给出列的名称

     列名都是以列簇作为前缀

     访问控制磁盘和内存的使用统计都是在列簇层面进行

   HBase准确的说是列簇数据库,而不是列数据库

   列簇数据库将列组织为列簇,每列都必须是某个列簇的一部分

     访问数据的单元也是列

 

Hbase表的组成:

RowKey :HBase中用RowKey去标识唯一的一行数据,一行数据中包含多个列簇

Column Family:列族。相当于列的分组,由多个列构成一个列族。同一列族下的列具有相同的属性

Column:列。每一列数据包含了版本和值

Timestamp:版本。可以理解为时间戳,也可以理解为一个数据的版本

Cell:单元格。就是由行列所唯一确定的单元格。一个单元格可能包含多个version

Hbase架构:

1、Client
     提供了访问HBase的一系列API接口,如Java Native API、Rest风格http API、Thrift API、scala等,并维护cache来加快对HBase的访问

2、Zookeeper
(1)保证任何时候,集群中只有一个master

(2)存贮所有Region的寻址入口。

(3)实时监控Region server的上线和下线信息,并实时通知Master

(4)存储HBase的schema和table元数据


3、Master
(1)为Region server分配region

(2)负责Region server的负载均衡

(3)发现失效的RegionServer并重新分配其上的region

(4)管理用户对table的增删改操作

4、RegionServer
(1)Region server维护region,处理对这些region的IO请求,向HDFS文件系统中读写数据。

一个RegionServer由多个region组成,一个region由多个store组成,一个store对应一个CF(列族),而一个store包括位于内存中的memstore和位于磁盘的storefile,每个storefile以HFile格式保存在HDFS上。写操作先写入memstore,当memstore中的数据达到某个阈值时,RegionServer会启动flashcache进程写入storefile,每次写入形成单独的一个storefile。

(2)Region server负责切分在运行过程中变得过大的region

每个表一开始只有一个region,随着表数据不断插入,数据越来越多,storefile也越来越大,当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),minor主要是合并一些小的文件,不做删除,清理操作,而majar在合并过程中会进行版本合并和删除工作,形成更大的storefile。

当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个新的region(裂变),每个region保存一段连续的数据片段,如此往复,就会有越来越多的region,并由Master分配到相应的RegionServer服务器,这样一张完整的表被保存在多个Regionserver 上,实现负载均衡。

æ¬é¡µæ æ é¢

5、Region
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。

5 HRegionè½ç¶æ¯åå¸å¼å­å¨çæå°ååï¼ä½å¹¶ä¸æ¯å­å¨çæå°ååã

HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成,每个storefile以HFile格式保存在HDFS上,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile,如下图。

æ¬é¡µæ æ é¢

HFile的格式为:

本页无标题

  HFile分为六个部分:

  Data Block 段–保存表中的数据,这部分可以被压缩

  Meta Block 段 (可选的)–保存用户自定义的kv对,可以被压缩。

  File Info 段–Hfile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。

  Data Block Index 段–Data Block的索引。每条索引的key是被索引的block的第一条记录的key。

  Meta Block Index段 (可选的)–Meta Block的索引。

  Trailer–这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始 位置(段的Magic Number用来做安全check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个 block读取到内存中,再找到需要的key。DataBlock Index采用LRU机制淘汰。

  HFile的Data Block,Meta Block通常采用压缩方式存储,压缩之后可以大大减少网络IO和磁盘IO,随之而来的开销当然是需要花费cpu进行压缩和解压缩。

  目标Hfile的压缩支持两种方式:Gzip,Lzo。

6、HLog(Write Ahead Log)
在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复

HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是” 写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的Key、Value
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值