Hbase相关面试题

本文深入探讨了HBase的架构和基本原理,包括其与传统关系型数据库的区别、读写性能对比、Region切分过程以及读取数据流程。讨论了HBase在列存储、时间版本和可扩展性方面的特点,并提出其适用场景。此外,还涵盖了HBase在面试中的常见问题,如操作API、数据存储、Spark读取HBase及二级索引等。

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

他人真实面试问题

版权声明:本文为博主原创文章,转载请注明出处,欢迎交流。QQ911283415

1.HBase的架构和基本原理

Hbase以表的方式组织数据,
表由行(Row)以及列(Column)组成,行由row key和一个或多个列及其值组成(存储是按照row key的字典顺序排序,row key的设计非常重要!!),
列必须属于某一列族(Column family),一个列族可以有一各或多个列(一列由列簇和列修饰符组成,他们通常由冒号(:) 分隔),其在存储架构中就是一个Hfile
Hbase中的列可以达到百万级,列中的数据可以是稀疏的,空值并不占用存储空间。
数据按主键排序,同时表按主键划分为多个Region。底层是LSM树(Long-Structed Merge Tree)。

对于以上叙述,表的简略结构:(逻辑模型)

这里写图片描述
注1:建议把Hbase理解为一个多维Map

Hbase简略架构图如下:

这里写图片描述

接下来对Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等做个简单叙述:

Zookeeper

  • 保证任何时候,集群中只有一个master(负责多HMaster的选举)
  • 存贮所有Region的寻址入口
  • 实时监控RegionServer的状态、将RegionServer的上线和下线信息实时通知给Master(服务器之间状态同步)
  • 存储Hbase的schema(元数据信息)。包括有哪些table、每个table有哪些column family等

HMaster
(主要负责table和region的管理工作)

  • Region分裂后,为RegionServer分配新的Region
  • 负责RegionServer的负载均衡,调整region的分配
  • 发现失效的region server并重新分配其上的region
    (Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,见转载文章:http://developer.51cto.com/art/201708/549419.htm
  • 管理用户对table的增、删、改、查操作
  • 监听zk,基于zookeeper感应rs的上下线
  • 监听zk,基于zookeeper来保证HA
  • 处理schema更新请求 (管理用户对表的增删修改)
  • 不参与对表的读写访问
  • 负载很低
  • 无SPOF(单点故障)
  • 在一个RegionServer死机后,负责失效节点的Region的迁移

HRegionServer

### 关于Hive和HBase的大数据面试题及答案解析 #### Hive相关面试题及答案解析 1. **什么是Hive?它的主要组成部分有哪些?** Hive是一个基于Hadoop的数据仓库工具,用于大规模数据分析。它提供了SQL-like接口(称为HiveQL),使得用户可以通过类SQL语句操作结构化或半结构化的数据[^1]。 主要组件包括: - **Metastore**:存储元数据信息,如表名、字段定义等。 - **Driver**:负责编译、优化并执行查询计划。 - **Query Compiler**:将HiveQL转换为MapReduce作业。 2. **Hive中的内部表和外部表的区别是什么?** 内部表在删除时会同时删除数据和元数据,而外部表仅删除元数据,保留原始数据文件。 3. **Hive支持哪些文件格式?** 常见的文件格式包括TextFile、SequenceFile、ORC、Parquet等。其中,ORC和Parquet因其高效的压缩率和性能,在大数据场景中广泛使用。 --- #### HBase相关面试题及答案解析 1. **HBase实时查询的原理是什么?** 当客户端发起一次Get请求时,HBase首先会在MemStore中查找目标数据。如果未命中,则继续访问WAL(Write-Ahead Log)。最后,若仍未找到匹配记录,则依次扫描对应的HFiles以完成查询过程[^3]。 2. **Compact的作用及其分类?** Compact的主要作用是合并小型StoreFiles,减少I/O开销,并清理已标记为删除的数据版本。其分为Minor Compaction和Major Compaction两种类型: - Minor Compaction:只合并部分较小的StoreFiles。 - Major Compaction:全面合并所有StoreFiles,并清除历史旧版本数据[^4]。 3. **如何解决HBase中的Region热点问题?** 解决方法之一是对表进行预分区设置。通过合理分配Split Keys,使Row Key均匀分布到各个Region上,从而有效缓解因某些Hot Region引发的压力集中现象[^5]。 4. **当某个HRegionServer发生宕机时,系统是如何应对这种情况的?** 如果某台HRegionServer不可用,ZooKeeper会检测到这一事件并向Master报告状态变化情况。随后,HMaster重新分配该节点上的Regions至其他正常运行的服务实例上接管服务请求。 --- ```python from happybase import Connection def connect_to_hbase(host='localhost', port=9090): """连接到HBase""" connection = Connection(host, port) return connection def create_table_with_pre_split(connection, table_name, column_families, split_keys): """创建带有预分区的表格""" families = {family: {} for family in column_families} connection.create_table(table_name, families=families, splits=split_keys) # 示例调用 conn = connect_to_hbase() create_table_with_pre_split(conn, 'test_table', ['cf'], [b'10', b'20', b'30']) ``` 上述Python代码展示了如何利用`happybase`库实现带预分区功能的HBase表创建逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值