🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
HBase简介
HBase是一个基于Hadoop的分布式、可扩展、支持大数据存储的数据库。
**使用场景:**需要随机或实时读写大数据的场景
**目标:**支持数十亿行和数百万列的大表
底层技术对应关系:
|---------------|-------------------------|--------------------------------------|----------------------------------------------------|
| 分布式列存储 | BigTable | HBase(基于Hadoop) | BigTable是Google的分布式列存储系统,HBase是其开源实现,提供稀疏多维映射表。 |
| 分布式文件系统 | GFS(Google File System) | HDFS(Hadoop Distributed File System) | GFS是Google的早期分布式文件系统,HDFS是其开源版本,支持大规模数据存储。 |
| 海量数据处理框架 | MapReduce | Hadoop MapReduce | MapReduce是Google提出的分布式计算模型,Hadoop MapReduce是其开源实现。 |
| 分布式协同服务管理 | Chubby | Zookeeper | Chubby是Google的分布式锁服务,Zookeeper是其开源实现,用于协调分布式系统。 |
数据模型
HBase采用表来组织数据,采用命名空间(NameSpace)对表进行逻辑分组。
NameSpace: 命名空间,类似于mysql中的database,默认有default和hbase,用户表默认在default中
表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。
行:每个HBase表都由若干行组成,每个行由可排序的**行键(row key)**来标识。
列:采用列族:列限定符的形式确定具体的一列。
列族:一个HBase表被分组成许多"**列族"(Column Family)**的集合,它是基本的访问控制单元。列族可以动态添加,但在定义表时需要指定至少一个列族,在使用某个列族时要事先定义。
列限定符:表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起。列族里的数据通过**"列限定符"(Column qualifier)**来定位。
单元格:在HBase表中,通过行、列族和列限定符确定一个"单元格"(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[],所以在定义表时无需定义数据的类型,使用时用户需要自行进行数据类型转换。
时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引, HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留(这是和HDFS只允许追加不允许修改的特性相关的)
HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳,在进行数据存储的时,其采用key-value形式:Table + RowKey(升序) + ColumnFamily + Column + Timestamp --> Value

系统架构

HBase采用主从结构设计,基础存储依赖于HDFS,协调服务依赖于Zookeeper集群,HMaster负责HBase的管理操作,HRegionServer负责数据的相关操作。
客户端(Client)
客户端包含访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续数据访问过程。
对于管理类操作,Client与HMaster进行RPC
对于数据读写操作,Client与HRegion Server进行RPC
Zookeeper服务器
Zookeeper是Chubby算法的一种开源实现
- 保证任何时候,集群中只有一个活跃的master,因为为了保证安全性会启动多个Master
- 存储所有Region的寻址入口
- 实时监控Region Server的状态,将Region Server的上下线的信息汇报给HMaster。
- 存储Hbase的元数据(Schema)包括,知道整个Hbase集群中有哪些Table,每个 Table 有哪些column family(列族)
Master服务器
主服务器主要负责表和Region的管理工作, 其实现类为 HMaste :
- 对于表的操作:create, delete, alter
- 对于 RegionServer 的操作:
- 实现不同Region服务器之间的负载均衡
- 在Region分裂或合并后,负责重新调整Region的分布
- 对发生故障失效的Region服务器上的Region进行迁移
Region服务器
Region服务器是HBase中最核心的模块,维护Master分配给他的 Region ,其实现类为 HRegionServer ,主要组成如下:
- 一个Region服务器包含多个Region,这些Region共用一个HLog文件
- Region由一个或者多个Store组成,每个Store保存一个 Columns Family。
- 每个Strore又由一个MemStore和0至多个StoreFile组成。
- MemStore存储在内存中,StoreFile存储在HDFS
- StoreFile的底层实现是HFile
主要作用如下:
- 对于数据的操作:get, put, delete
- 对于 Region 的操作:splitRegion、compactRegion