Hbase面试题总结

一、介绍下HBase架构

sql 复制代码
--HMaster
HBase集群的主节点,负责管理和协调整个集群的操作。它处理元数据和表的分区信息,控制RegionServer的负载均衡和故障恢复。

--RegionServer
HBase集群中的工作节点,负责存储和处理数据。每个RegionServer管理若干个Region,每个Region负责存储一部分表的数据。RegionServer处理读写请求,并与HDFS交互来存储和获取数据。
--ZooKeeper
HBase使用ZooKeeper来进行协调和管理。ZooKeeper负责选举HMaster节点,并存储HBase集群的元数据,以及监控和管理集群的状态。

--HDFS
HBase使用HDFS作为底层的分布式文件系统,用于存储数据。HBase将数据以Region的形式存储在HDFS上,每个Region对应一个HFile。

二、HBase存储结构?

sql 复制代码
由行键、列簇、列名(列限定符)、时间戳组成一个单元格,单元格中存储着具体的数据值

三、HBase读写流程

sql 复制代码
--HBase读流程
1、当客户端请求读取数据时,首先需要根据数据的行键(row key)定位到对应的Region Server。
2、在Region Server中,HBase使用MemStore和HFile两个存储结构来存储数据。MemStore是基于内存存放的数据。HFile是磁盘中的存储文件,用于数据持久化。
3、当在MemStore中找不到所需的数据时,HBase会去HFile中查找。它通过索引文件(HFile中的Blomm Filter和Block Index)快速定位到所需的数据块,并从磁盘读取数据。
4、一旦找到数据,HBase会将其返回给客户端。

--HBase写流程
1、当客户端请求写入数据时,首先需要确定数据所属的Region Server。
2、在Region Server中,数据首先会被写入到MemStore中,这是一个内存缓冲区。
3、当MemStore中的数据达到一定阈值时,MemStore中的数据会被刷新到磁盘,生成一个新的HFile并被存储到HDFS中。
4、同时,HBase会更新HBase的元数据(如Region的位置、表的结构等)。
5、当需要写入的数据量较大时,HBase还会进行数据预分区,将数据分布到不同的Region中,以实现负载均衡和并行写入。

四、HBase的一个region由哪些东西组成?

sql 复制代码
1、行键范围(start key 和 end key):每个region都有一个唯一的行键范围,用于标识该region负责存储的数据范围。
2、MemStore:每个region都有一个内存中的MemStore,用于缓存该region内的写入操作。当MemStore的大小达到一定阈值时,会将其刷新到磁盘上的HFile。
3、HFile:每个region都包含一个或多个HFile,用于持久化存储该region内的数据。HFile是HBase中的底层存储格式,以块的形式存储数据,并提供快速的读取和写入操作。
4、WAL(Write-Ahead-Log):每个region都有一个WAL,用于记录该region内的写入操作。WAL在写入操作发生时先将操作记录到日志中,然后再将数据写入MemStore。WAL的作用是保证数据的持久化和可恢复性。
5、Region Server:每个region都由一个Region Server负责管理和处理。Region Server是HBase集群中的工作节点,负责处理读写请求、维护和管理region以及与HDFS进行交互。

五、 RowKey设计原则

sql 复制代码
--长度原则
不要超过16个字节
--散列原则
如果rowkey按照时间戳的方式递增,将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个RegionServer
--唯一原则
HBase中数据存储的格式是Key-Value对,如果插入相同RowKey的数据,则原先存在的数据会被新的数据覆盖。
--排序原则
HBase中的数据是按照RowKey的字典顺序进行排序的,设计RowKey可以利用这个特性,将经常一起读取的数据存储到一起,提高查询效率

六、hbase中热点问题的处理方案

sql 复制代码
--热点问题
在HBase中,热点问题指的是某个或某些特定的行键(rowkey)或列族(column family)被频繁访问,导致某些RegionServer的负载过高,从而影响整个系统的性能和稳定性

--处理方案
1、预分区
HBase默认创建的表只有一个Region,这可能导致所有数据都写入到这一个Region中,从而引发热点问题。通过预分区,可以在创建表时指定Region的数量,使数据在多个Region中均匀分布。、
2、RowKey设计
可以yong加盐的方式,在RowKey前加上一个随机前缀,使得原本相近的RowKey分散到不同的Region中。
3、使用缓存
HBase自带了缓存机制,可以将热点数据放入缓存中,减少磁盘I/O操作,提高访问速度。
相关推荐
石头wang几秒前
oracle jdbc 依赖以及对dbeaver的性能影响,如何选择oracle驱动, oracle jdbc 驱动
数据库·oracle
weixin_452159552 分钟前
如何从Python初学者进阶为专家?
jvm·数据库·python
2301_7903009631 分钟前
用Python读取和处理NASA公开API数据
jvm·数据库·python
万象.44 分钟前
redis持久化:AOF和RDB
数据库·redis·缓存
cd_949217211 小时前
九昆仑低碳科技:所罗门群岛全国森林碳汇项目开发合作白皮书
大数据·人工智能·科技
Acrelhuang1 小时前
工商业用电成本高?安科瑞液冷储能一体机一站式解供能难题-安科瑞黄安南
大数据·开发语言·人工智能·物联网·安全
小王毕业啦1 小时前
2010-2024年 非常规高技能劳动力(+文献)
大数据·人工智能·数据挖掘·数据分析·数据统计·社科数据·经管数据
tod1131 小时前
力扣高频 SQL 50 题阶段总结(四)
开发语言·数据库·sql·算法·leetcode
言無咎1 小时前
从规则引擎到任务规划:AI Agent 重构跨境财税复杂账务处理体系
大数据·人工智能·python·重构
!chen1 小时前
Redis快速实现布隆过滤器
数据库·redis·缓存