Hbase基本架构及原理

Posted 祺嘉朱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbase基本架构及原理相关的知识,希望对你有一定的参考价值。

简述

       Hadoop Databases 基于Hadoop存储,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务 主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)​

数据模型

列族

       权限控 HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’

         列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入制、存储以及调优都是在列族层面进行的

       HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

timestamp时间戳

        在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异, 不同版本的数据按照时间倒序排序,最新的数据版本排在最前面 。

        时间戳的类型是 64位整型 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳​

单元格cell

单元格是有版本的(时间戳决定)​,行和列交叉决定​

  • 单元格的内容是未解析的字节数组(row key ,column(=<family>+<qualifier>), version) 一确定的单元,cell中的数据是没有类型的,全部是字节数组形式储存二进制安全

Hlog

  • 预写日志,上传数据时不会直接存储磁盘上,先存储在哪内存中,到达一定阈值后写出​
  • 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中的KeyValu​

架构


基本组件与流程

Client

  • 访问Zookeeper,不会直接和Master打交道,包含了访问Hbase的接口并维护cache来加快对Hbase的访问​
  • Zookeeper记录着meta表在哪里,存储元数据信息(Hbase:meta),上面存储哪个region存储在哪里​
[zk: localhost:2181(CONNECTED) 1] ls /hbase/table
[hbase:meta, hbase:namespace, student]
[zk: localhost:2181(CONNECTED) 2] ls /hbase
[replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table]
[zk: localhost:2181(CONNECTED) 3] get /h
hadoop-ha   hbase     
[zk: localhost:2181(CONNECTED) 3] get /h
hadoop-ha   hbase     
[zk: localhost:2181(CONNECTED) 3] get /h
hadoop-ha   hbase     
[zk: localhost:2181(CONNECTED) 3] get /hbase/meta-region-server
?regionserver:60020Xz??f
??PBUF
 
five??????0 
cZxid = 0x2b00000047
ctime = Wed Oct 26 10:36:17 CST 2022
mZxid = 0x2b00000047
mtime = Wed Oct 26 10:36:17 CST 2022
pZxid = 0x2b00000047
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 58
numChildren = 0
[zk: localhost:2181(CONNECTED) 4] 
  •  获取之后去对应区域寻找meta表上对应的region信息​
  • 直接到相应的region上读取相应的数据​

Zookeeper

  • 保证任何时候集群中只有一个存或的HMseter
  • 存储这所有Region的寻址入口(meta位置)​
  • 实时监控Regionserver的上下线,并实时通知HMaster
  • 存储HBase的schema和table元数据​

Master

  • 为RegionServer分配region​
  • 负责Region server的负载均衡​
  • 发现失效的RegionServer并重新分配上面的Region
  • 管理用户对table的增删改操作​

RegionServer

  • RegionServer维护region,处理这些region的IO请求​
  • RegionServer负责分担在运行过程中变得过大的Region(人工干预)

Region

Hbase自动把表横向切分成几个区域,每个region存储一段连续的数据(字典排序)

        每个表一开始只有一个Region,region不断增大,当增大到一个阈值的时候, region就会等分会两个新的region(裂变)table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver

Memstore和storeFile​

  1. 一个region由于多个store组成,一个store对应一个列族​
  2. store包括位于内存中的memstore和位于磁盘的storefile,写操作先写入memstore,当memstore中的数据达到某个阈值, hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile​
  3. 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction), 在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile​
  4. 当一个region的所有storefile增长到一定阈值后,会把当前的region分割成两个,并由于Hmaste分配到对应的RegionServer服务器,实现负载均衡​
  5. 客户端检索数据,先到memstore上找,找不到再找storefile​
  6. Heregion是Hbase中分布式存储和负载均衡的最小单元,最小单元就表示不同的HRegion可以分布再不同的Hregion​

以上是关于Hbase基本架构及原理的主要内容,如果未能解决你的问题,请参考以下文章

hbase数据原理及基本架构

Hbase基本架构及原理

HBase架构组成及原理

HBase-整体架构及读写原理

Hbase原理基本概念基本架构

HBase 架构详解及读写流程原理剖析