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操作,提高访问速度。
相关推荐
D愿你归来仍是少年5 分钟前
Flink 并行度变更时 RocksDB 状态迁移的关键机制与原理
大数据·flink·apache
2501_908329855 分钟前
使用Python自动收发邮件
jvm·数据库·python
昨夜见军贴061618 分钟前
AI审核守护透析安全:IACheck助力透析微生物检测报告精准合规
大数据·人工智能·安全
新新学长搞科研24 分钟前
【高届数会议征稿】第十二届传感云和边缘计算系统国际会议(SCECS 2026)
大数据·人工智能·生成对抗网络·边缘计算·传感器·学术会议
heimeiyingwang24 分钟前
【架构实战】数据库分库分表实战
数据库·架构
爬山算法33 分钟前
MongoDB(60)如何使用explain命令?
数据库·mongodb
2501_9083298536 分钟前
NumPy入门:高性能科学计算的基础
jvm·数据库·python
瀚高PG实验室39 分钟前
数据库因坏块导致无法VACUUM FREEZE问题处理
数据库·瀚高数据库
科技前瞻观察39 分钟前
国内科技领先的企业有哪些
大数据
gechunlian881 小时前
Redis简介、常用命令及优化
数据库·redis·缓存