Hadoop经典面试题及解析


1. HDFS架构核心组件

问题:NameNode和DataNode的作用是什么?
解析

  • NameNode:存储元数据(文件目录树、块位置映射),管理文件系统命名空间,处理客户端请求
  • DataNode:存储实际数据块,定期向NameNode发送心跳和块报告
  • Secondary NameNode:辅助合并fsimage和edits文件(非热备节点)

2. MapReduce执行流程

问题:描述WordCount程序的执行过程
解析

// Mapper阶段
map(String key, String value):
    for word in value.split():
        emitIntermediate(word, "1")

// Reducer阶段
reduce(String key, Iterator values):
    int sum = 0;
    while(values.hasNext()) sum += parseInt(values.next());
    emit(key, sum)

过程分解:

  1. 输入分片(Split)
  2. Map任务处理生成键值对
  3. Shuffle阶段排序分组
  4. Reduce任务聚合结果

3. 数据倾斜解决方案

问题:如何处理MapReduce中的数据倾斜?
方法

  1. 预处理数据采样(Combine抽样检测热点Key)
  2. 自定义Partitioner将热点Key分散到不同Reducer
  3. 使用随机前缀打散Key(如:KaTeX parse error: Expected 'EOF', got '#' at position 32: …iginal\_key + "#̲" + random(3)
  4. 开启Combiner预聚合

4. HDFS读写流程

问题:描述文件写入HDFS的过程
流程

  1. 客户端向NameNode申请写入
  2. NameNode返回DataNode列表(含副本存储位置)
  3. 客户端建立管道传输数据块
  4. DataNode完成副本复制后返回确认

5. YARN架构原理

问题:YARN如何实现资源管理?
组件

  • ResourceManager:全局资源调度(含Scheduler和ApplicationsManager)
  • NodeManager:单节点资源监控与容器管理
  • ApplicationMaster:单个应用的任务协调

资源分配公式:
total_container=cluster_memorycontainer_memory×cluster_vcorescontainer_vcores total\_container = \frac{cluster\_memory}{container\_memory} \times \frac{cluster\_vcores}{container\_vcores} total_container=container_memorycluster_memory×container_vcorescluster_vcores


6. 小文件问题处理

问题:HDFS存储小文件有什么影响?如何优化?
解决方案

  1. 使用Har归档文件(Hadoop Archive)
  2. 合并小文件为SequenceFile
  3. 调整HDFS块大小参数(dfs.blocksize)
  4. 使用CombineFileInputFormat

7. 容错机制

问题:Task失败后如何恢复?
机制

  1. TaskTracker定期发送心跳
  2. 若Task失败超过4次(可配置),任务标记为失败
  3. ApplicationMaster重新调度任务到其他节点
  4. 已完成的Map任务结果会被保留

8. 推测执行原理

问题:什么是推测执行(Speculative Execution)?
原理
当检测到某个Task比同阶段其他Task慢时(通过进度百分比比较),启动备份任务并行执行,最终取先完成的结果。判断公式:
progress_rate=current_progress−last_progresstime_diff progress\_rate = \frac{current\_progress - last\_progress}{time\_diff} progress_rate=time_diffcurrent_progresslast_progress
当某Task速率低于平均速率的0.20.20.2倍时触发推测执行。


9. Hadoop 1.x与2.x差异

对比

特性 Hadoop 1.x Hadoop 2.x
资源管理 JobTracker统一管理 YARN分层架构
扩展性 最大4000节点 支持10000+节点
高可用 NameNode单点故障 NameNode HA(双主热备)

10. 适用场景分析

问题:Hadoop适合处理哪些类型的数据?
典型场景

  • 离线批处理(日志分析、ETL)
  • 海量数据存储(PB级)
  • 非结构化数据处理(文本、图像)
    不适用场景
  • 低延迟实时计算
  • 频繁更新的OLTP系统
  • 强事务一致性需求场景

提示:理解底层设计原理比死记配置参数更重要,面试时建议结合项目经验说明具体问题的解决过程。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐