当前位置: 首页 > news >正文

hbase 面试题

单行的强一致性的实现方式

  1. HBase 的操作粒度是 行(RowKey),一行的数据一定存放在同一个 RegionServer 上。
  2. 写入时先写 WAL 再写 MemStore,保证数据的持久性和一致性。
  3. 行级操作(Put/Delete/CheckAndPut/Increment)都是 原子性的。
  4. 内部通过 行锁(Row Lock) 避免并发冲突,从而实现单行的强一致性。

HBase 和 HDFS 的关系是什么?

可以这样理解:HBase 是建在 HDFS 之上的数据库,HDFS 是 HBase 的存储基础。

  1. HDFS 提供分布式存储能力

    • 把大文件切分成块(默认 128MB/256MB),分布在多个节点上,具备容错和高可用。
    • 只支持 顺序读写、批处理,不支持随机读写。
  2. HBase 基于 HDFS 实现数据库功能

    • 把表数据存储为 HFile 文件放在 HDFS 上。
    • 借助 HDFS 的分布式能力,实现水平扩展和海量数据存储。
    • 在 HDFS 的顺序读写之上,HBase 提供了 随机、实时读写
  3. 写入流程依赖 HDFS

    • 数据先写 WAL(预写日志,存放在 HDFS),再写内存 MemStore
    • MemStore 刷写成 HFile,落盘到 HDFS,最终形成持久化存储。
  4. 容错与恢复

    • HBase 不自己实现副本机制,而是依赖 HDFS 的副本机制(默认 3 副本)。
    • 一旦 RegionServer 崩溃,可以从 HDFS 上的 WAL 和 HFile 恢复数据。

🔑 典型适用场景

  1. 海量数据存储

    • 适合存储 TB~PB 级别的结构化或半结构化数据。
    • 例如:电信行业的通话记录(CDR)、用户行为日志、广告点击流。
  2. 时序数据 / 监控数据

    • RowKey 可设计为 时间戳+业务ID,支持按时间顺序快速写入与查询。
    • 例如:物联网传感器数据、金融行情、应用监控指标(如 Prometheus 的长期存储)。
  3. 用户画像与推荐系统

    • 存储大规模用户特征、行为数据,结合推荐算法进行实时查询。
    • 例如:电商的商品点击/购买历史、视频平台的观影行为。
  4. 消息和日志存储

    • 写多读少,要求写入高吞吐、持久化和按需检索。
    • 例如:系统日志、访问日志、运维监控日志。
  5. 大数据平台底层存储

    • Hadoop、Spark、Hive、Phoenix 集成,作为大数据分析和实时查询的存储引擎。
    • 例如:实时+离线混合的数仓架构。

hbase 不适用场景

  • 强事务需求(如银行转账、电商订单支付) → 更适合用关系型数据库。
  • 复杂 SQL 关联查询 → HBase 本身不支持 JOIN,需借助 Hive/Phoenix。
  • 小规模数据场景 → 用 MySQL、PostgreSQL 更简单。

一句话总结
HBase 适合 大数据量、高并发、实时读写 的场景,常用于 日志、时序数据、用户画像、IoT、推荐系统 等,而不适合 强事务、复杂关系查询 的传统 OLTP 业务。

好问题 👌,我来分步骤解释一下 HBase 的数据存储在 HDFS 上的过程和组织结构


hbase 是如何存储在hdfs 上的

🔑 1. 存储单元划分

  • 表(Table):用户逻辑上的数据表。

  • Region:表按 RowKey 范围水平切分为多个 Region,每个 Region 存放在一个 RegionServer 上。

  • Store:一个 Region 按列族(Column Family)再划分为多个 Store。

  • HFile:每个 Store 最终存储为多个 HFile 文件,保存在 HDFS 上。

👉 层级关系
Table → Region → Store(列族) → HFile


🔑 2. 写入流程

  1. 写 WAL(HLog,存在 HDFS 上)

    • 先把写请求记录到预写日志,保证宕机时可恢复。
  2. 写入 MemStore(内存)

    • 数据写到内存的 MemStore 中。
  3. Flush 成 HFile(HDFS)

    • 当 MemStore 达到阈值,会被刷写(flush)成一个 不可变的 HFile 存放到 HDFS。

🔑 3. HFile 文件组织

  • 底层存储格式:HFile(类似 SSTable)

  • 内容

    • Data Block:存放实际的 KeyValue(RowKey + ColumnFamily + Qualifier + Timestamp + Value)
    • Index Block:加速查找
    • Meta Block:存放元数据
    • Trailer:存放文件整体信息

🔑 4. Compaction(合并机制)

  • 随着不断写入,Region 下会产生很多小的 HFile。

  • HBase 会自动执行 Compaction(合并)

    • Minor Compaction:合并小文件 → 减少文件数量
    • Major Compaction:合并所有文件,清理过期数据、删除标记

🔑 5. HDFS 的角色

  • 数据存储:所有 WAL、HFile 文件最终存放在 HDFS 上。
  • 容错机制:HDFS 提供多副本存储(默认 3 副本),保证数据安全。
  • 分布式能力:数据分布在不同 DataNode 上,支持水平扩展。

一句话总结
HBase 把表切分成 Region,Region 按列族存为多个 Store,每个 Store 最终由多个 HFile 文件保存在 HDFS,写入时先经过 WAL+MemStore,再刷写到 HDFS,依赖 HDFS 的副本和分布式存储实现可靠性和扩展性。


HBase 的写放大和读放大是什么意思?

🔑 1. 写放大(Write Amplification)

  • 定义:一次用户写入操作,最终会导致 多次磁盘写入

  • 原因

    1. 写入时,数据先写 WAL(HDFS 上),再写 MemStore(内存)
    2. 当 MemStore 满了,会 Flush 成 HFile,落盘到 HDFS。
    3. 随着 HFile 越来越多,系统会执行 Compaction(文件合并),把多个小文件合并成大文件。
  • 结果
    一条数据可能被写到磁盘 多次(Flush + 多轮 Compaction)。

  • 影响

    • 增加了磁盘 IO 和存储压力。
    • 但换来的是高写入吞吐量和有序存储。

🔑 2. 读放大(Read Amplification)

  • 定义:一次用户读请求,可能需要访问 多个文件/存储位置 才能得到结果。

  • 原因

    1. 数据可能分布在 MemStore(内存)、多个 HFile(磁盘)、BlockCache(缓存) 中。
    2. 由于 HFile 按时间生成,最新数据可能在 MemStore,老数据在多个 HFile 中。
    3. 读操作需要同时查多个存储位置,并合并结果。
  • 结果
    一次查询可能触发 多次 IO,增加查询延迟。

  • 优化方式

    • 利用 BlockCache 缓存热点数据。
    • 通过 Compaction 合并文件,减少 HFile 数量。

一句话总结

  • 写放大:写一次数据,实际落盘多次(WAL、Flush、Compaction)。
  • 读放大:读一次数据,可能查多个文件(MemStore + 多个 HFile + BlockCache)。

HBase 的数据删除流程是怎样的?

好问题 👍,HBase 的 删除并不是立刻物理删除,而是一个带有延迟清理的流程。


🔑 HBase 删除流程(Delete 操作)

1. 写入 Delete 标记(Tombstone)

  • 当执行 Delete 操作时,HBase 不会立刻删除数据
  • 它会写入一个特殊的 Tombstone 标记,表示某个单元格(Cell)或某行数据在逻辑上已被删除。
  • Tombstone 也会像普通数据一样,先写入 WAL,再进入 MemStore,最后刷成 HFile。

2. 读取时的删除生效

  • 当客户端读取数据时,RegionServer 会检查是否存在 Tombstone。
  • 如果 Tombstone 覆盖了目标数据,则该数据不会返回给客户端(对外表现为已删除)。

3. Compaction 时物理删除

  • Tombstone 本身和被删除的数据,依然存放在 HFile 中。
  • 只有在 Major Compaction(主要合并)时,系统会真正把被 Tombstone 标记覆盖的数据清理掉,并删除对应的 Tombstone。
  • 因此,真正的物理删除是 延迟发生 的。

4. 删除粒度

  • HBase 支持多种级别的删除:

    • Delete Row:删除整行数据(所有列、所有版本)。
    • Delete Column Family:删除某一列族的所有数据。
    • Delete Column:删除某一列的所有版本。
    • Delete Version:删除某一列的指定版本(时间戳)。

一句话总结

HBase 删除流程是:
先写入 Tombstone(逻辑删除) → 读时过滤掉数据 → Major Compaction 时真正物理清理。

http://www.hskmm.com/?act=detail&tid=13535

相关文章:

  • ANSYS Electronics 2025 R1 安装与使用全流程图文教程
  • mall项目学习笔记
  • 实用指南:通义DeepResearch论文六连发全面解读
  • glTF/glb:现在和未来
  • 存储多边形网格的文件格式:OBJ、FBX、RenderMan、glTF、USD 等。
  • 安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析
  • Notepad++8.6免费版下载及安装教程(附安装包)2025最新整理
  • VTable-Sheet:重新定义Web电子表格的开源解决方案
  • Coolmuster Android Assistant:Windows架构下的Android设备管理专家
  • 负载均衡+Tomcat集群+MySQL主从 实验
  • mysql表新增字段,基本语法
  • 2025年运营商数据分类分级最佳实践、案例与方案
  • 微波雷达模块WT4101重新定义饮水机茶吧机等智能家居
  • 硝基甲苯之魇
  • day14-Trae之一键换脸APP开发04
  • Linux服务器单网卡如何配置多个的IP地址?
  • 面试常问问题——索引是不是越多越好
  • day38大模型程序开发-GraphRAG实操
  • 关于串口通信(232、485、422)和常见问题,一篇文章就给你说清楚~
  • day13-Trae之一键换脸APP开发03
  • python第一天
  • 摩尔投票法
  • 基于STM32平台的ADS1292心电采集驱动程序
  • ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池
  • 深入解析MS12-020关键漏洞CVE-2012-0002:远程桌面协议的安全风险与缓解方案
  • 鸿蒙项目实战(九):get请求参数的处理
  • allegro17.4 布线鼠标拖动变成了ployline,重启后恢复,记得有地方设置但是一时找不到在哪儿了,有知道的网友吗?
  • 20250806_信安一把梭_test
  • 专业 RAW 图像处理利器!DxO PhotoLab 让你的照片质感飙升
  • mysql时间转字符串,自定义格式将日期时间值转换为字符串