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)
过程分解:
- 输入分片(Split)
- Map任务处理生成键值对
- Shuffle阶段排序分组
- Reduce任务聚合结果
3. 数据倾斜解决方案
问题:如何处理MapReduce中的数据倾斜?
方法:
- 预处理数据采样(Combine抽样检测热点Key)
- 自定义Partitioner将热点Key分散到不同Reducer
- 使用随机前缀打散Key(如:KaTeX parse error: Expected 'EOF', got '#' at position 32: …iginal\_key + "#̲" + random(3))
- 开启Combiner预聚合
4. HDFS读写流程
问题:描述文件写入HDFS的过程
流程:
- 客户端向NameNode申请写入
- NameNode返回DataNode列表(含副本存储位置)
- 客户端建立管道传输数据块
- DataNode完成副本复制后返回确认
5. YARN架构原理
问题:YARN如何实现资源管理?
组件:
- ResourceManager:全局资源调度(含Scheduler和ApplicationsManager)
- NodeManager:单节点资源监控与容器管理
- ApplicationMaster:单个应用的任务协调
资源分配公式:
t
o
t
a
l
_
c
o
n
t
a
i
n
e
r
=
c
l
u
s
t
e
r
_
m
e
m
o
r
y
c
o
n
t
a
i
n
e
r
_
m
e
m
o
r
y
×
c
l
u
s
t
e
r
_
v
c
o
r
e
s
c
o
n
t
a
i
n
e
r
_
v
c
o
r
e
s
total\_container = \frac{cluster\_memory}{container\_memory} \times \frac{cluster\_vcores}{container\_vcores}
total_container=container_memorycluster_memory×container_vcorescluster_vcores
6. 小文件问题处理
问题:HDFS存储小文件有什么影响?如何优化?
解决方案:
- 使用Har归档文件(Hadoop Archive)
- 合并小文件为SequenceFile
- 调整HDFS块大小参数(dfs.blocksize)
- 使用CombineFileInputFormat
7. 容错机制
问题:Task失败后如何恢复?
机制:
- TaskTracker定期发送心跳
- 若Task失败超过4次(可配置),任务标记为失败
- ApplicationMaster重新调度任务到其他节点
- 已完成的Map任务结果会被保留
8. 推测执行原理
问题:什么是推测执行(Speculative Execution)?
原理:
当检测到某个Task比同阶段其他Task慢时(通过进度百分比比较),启动备份任务并行执行,最终取先完成的结果。判断公式:
p
r
o
g
r
e
s
s
_
r
a
t
e
=
c
u
r
r
e
n
t
_
p
r
o
g
r
e
s
s
−
l
a
s
t
_
p
r
o
g
r
e
s
s
t
i
m
e
_
d
i
f
f
progress\_rate = \frac{current\_progress - last\_progress}{time\_diff}
progress_rate=time_diffcurrent_progress−last_progress
当某Task速率低于平均速率的
0.2
0.2
0.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系统
- 强事务一致性需求场景
提示:理解底层设计原理比死记配置参数更重要,面试时建议结合项目经验说明具体问题的解决过程。