深度解析 Hadoop 集群运维、HBase 二级索引设计、Flink 实时计算状态管理及背压处理等核心考点,助你突破技术瓶颈。
在面试中,HA架构是必考题。需掌握 Active 与 Standby 状态的切换机制。重点在于 ZKFailoverController (ZKFC) 如何通过 Zookeeper 进行锁选举。同时,需理解 JournalNode 在同步 edits 日志中的作用,确保元数据的一致性。若面试官问及脑裂问题,需回答隔离机制(Fencing)的重要性。
常见的调度器包括 FIFO、Capacity 和 Fair。面试常问如何配置多队列以支持不同业务线。例如,在 Capacity Scheduler 中,如何设置最大最小资源限制,以及如何防止大任务独占集群资源。理解 Container 的生命周期及资源请求策略(如 locality 感知)也是关键。
小文件会消耗 NameNode 大量内存。解决方案包括:① 在写入时使用 HAR (Hadoop Archive) 打包;② 启用 SequenceFile 合并;③ 调整 Block Size;④ 使用 MapReduce 或 Spark 在写入前合并。需结合具体业务场景选择最优方案。
读流程:Client 先查 Zookeeper 获取 .META. 表位置,定位 RegionServer,若数据在 MemStore 则直接返回,否则从 BlockCache 或 HFile 读取。涉及 Bloom Filter (布隆过滤器) 加速查找。写流程:数据先写入 WAL (预写日志) 保证可靠性,再写入 MemStore,达到阈值后 Flush 为 HFile。需理解 Compaction (合并) 过程,特别是 Minor 与 Major Compaction 的区别。
面试常问如何避免 Region Split 导致的热点。策略包括:预分区 (Pre-splitting) 基于 RowKey 哈希或范围;RowKey 设计 增加随机前缀或盐值 (Salt) 打散数据;调整 BlockCache 大小;优化 Column Family 数量,避免过多 CF 导致资源碎片化。此外,Bulk Load 是海量数据导入的最佳实践,绕过 MapReduce 直接生成 HFile。
HBase 原生不支持二级索引。常见方案有:Phoenix:最流行的方案,将 SQL 编译为 MapReduce/Spark 任务,维护一张索引表,同步更新主表,适合读多写少场景;Coprocessor:在 RegionServer 端执行代码,实时更新索引,性能高但开发复杂;外部索引:如 Elasticsearch,通过双写保持同步,适合全文检索场景。
| 特性 | HBase 1.x | HBase 2.x | 面试关注点 |
|---|---|---|---|
| 存储引擎 | 仅 HFile | 支持 HFile & RFile | 格式兼容性 |
| 协处理器 | Observer/Endpoint | 增强 Endpoint 类型 | 服务端编程 |
| 预写日志 | 本地 WAL | 支持 HDFS WAL | 数据可靠性 |
Flink 的状态管理是核心。面试需区分 MemoryStateBackend (内存,适合开发测试)、FsStateBackend (状态存内存,元数据存 HDFS,生产常用) 和 RocksDBStateBackend (全量存本地磁盘,支持超大数据集)。理解 Checkpoint 机制,特别是 Chandy-Lamport 算法在 Flink 中的实现——Barriers (屏障) 如何对齐状态,以及 Exactly-Once 语义如何通过两阶段提交 (2PC) 实现。
窗口是 Flink 处理无限流的核心。需掌握 TimeWindow、CountWindow 及 SessionWindow。重点理解 Watermark 用于处理乱序数据,Late Data (迟到数据) 的处理方式(侧输出流 Side Output)。Trigger (触发器) 和 Evictor (清除器) 的自定义也是高阶考点。
背压是生产环境常见故障。Flink UI 中显示为红色。原因包括:下游处理慢、数据倾斜、序列化开销大。优化策略:① 增加并行度;② 调整 buffer timeout;③ 使用 Kryo 序列化;④ 检查数据倾斜,使用 Rebalance 或 Rescale 算子;⑤ 优化 KeyBy 策略,避免大 Key 热点。
-- 计算滚动窗口中的 UV
SELECT
TUMBLE_START(rowtime, INTERVAL '1' HOUR) as window_start,
COUNT(DISTINCT user_id) as uv
FROM user_behavior
GROUP BY TUMBLE(rowtime, INTERVAL '1' HOUR);
-- 使用 CEP 检测复杂事件模式
Pattern<OrderEvent> orderPattern = Pattern.<OrderEvent>begin("start")
.where(new SimpleCondition<OrderEvent>() {
@Override
public boolean filter(OrderEvent value) {
return "create".equals(value.getEventType());
}
})
.next("follow")
.where(new SimpleCondition<OrderEvent>() {
@Override
public boolean filter(OrderEvent value) {
return "pay".equals(value.getEventType());
}
})
.within(Time.minutes(10));
掌握 Linux 基础、Java 高级编程、集合框架、JVM 调优。熟悉 MySQL 索引、事务及 SQL 优化。这是所有大数据组件的基石。
深入学习 HDFS 原理、MapReduce 编程模型、YARN 资源调度。掌握 Hive SQL 优化及 HBase 基础操作。理解分布式系统一致性理论 (CAP/BASE)。
精通 Flink 核心 API、State Backend、Checkpoint 机制。掌握 Kafka 高级特性。理解流批一体架构,能够设计高可用实时数仓。
刷面试题,总结项目难点。重点准备:数据倾斜处理、性能调优、故障排查。模拟面试,提升表达能力。关注行业新技术,如 Flink CDC、Iceberg 等。
A: HBase 底层基于 HDFS,HDFS 设计为一次写入多次读取。HBase 写操作先入 WAL 和 MemStore,内存写入速度快。读操作需经过 BlockCache 和 HFile,若数据未加载到内存,需磁盘 IO,且 HFile 为列式存储,查询特定列效率高,但全表扫描效率低。因此,HBase 适合基于 RowKey 的点查或范围查,不适合复杂关联查询。
A: 主要通过两个机制:① Checkpoint:基于 Chandy-Lamport 算法,定期保存状态快照,故障时从最近快照恢复;② 两阶段提交 (2PC):Sink 连接器实现 TwoPhaseCommitSinkFunction,预处理时写入临时事务,Checkpoint 成功后再提交事务,确保数据一致性。
A: ① 增加 NameNode 内存;② 减少 HDFS 文件数量(合并小文件);③ 调整 fs.checkpoint.period 缩短编辑日志间隔;④ 升级硬件或使用 SSD 提升元数据 IO 性能。长期可考虑迁移至 Hadoop 3.x 支持 Multi-NameNode。