本书汇总大数据高频面试题,从基础到实战全面覆盖,涵盖Hadoop、Spark、Flink等核心框架原理,数据仓库、实时计算、性能优化等实战场景,每题附详细解析与思路点拨,既巩固基础概念(如HDFS架构、MapReduce流程),又提升解决复杂问题的能力(如数据倾斜处理、ETL设计),助求职者系统梳理知识体系,高效应对面试挑战。
随着大数据技术的飞速发展,Hadoop、Spark、Flink等框架已成为企业数据处理的核心工具,大数据岗位面试不仅考察候选人对理论知识的掌握,更注重实际工程能力和问题解决思路,本文整理了大数据领域高频面试题,涵盖Hadoop、Spark、Hive、Flink、数据仓库等核心模块,并附详细解析,助你系统备战面试。
Hadoop生态面试题
HDFS的架构是什么?NameNode和DataNode的作用分别是什么?
答案:
HDFS(Hadoop Distributed File System)采用主从架构(Master-Slave),由NameNode、DataNode和Client三部分组成。
-
NameNode:
- 元数据管理:存储文件系统的元数据,包括文件名、目录结构、文件副本数、Block与DataNode的映射关系等(存储在内存和磁盘的
fsimage和editlog中)。 - 客户端请求响应:处理文件的创建、删除、打开等操作,返回DataNode的地址信息。
- 集群协调:监控DataNode状态(通过心跳机制),处理DataNode的失效和恢复。
- 元数据管理:存储文件系统的元数据,包括文件名、目录结构、文件副本数、Block与DataNode的映射关系等(存储在内存和磁盘的
-
DataNode:
- 数据存储:实际存储文件数据(按Block切块,默认128MB),每个Block存储多个副本(默认3个)。
- 数据读写服务:响应Client的读写请求,提供Block数据流。
- 心跳汇报:定期向NameNode汇报自身状态(存储的Block列表、磁盘空间、网络健康状况等)。
-
Client:
文件操作入口:通过NameNode获取元数据,直接与DataNode交互完成数据读写(读文件时NameNode返回DataNode列表,Client从DataNode并行读取Block)。
MapReduce的执行流程是什么?Shuffle阶段的作用是什么?
答案:
MapReduce是分布式计算框架,核心流程分为Map阶段、Shuffle阶段和Reduce阶段:
-
Map阶段:
- 输入:Split(数据块,通常与HDFS Block大小一致)。
- 处理:Mapper读取Split数据,通过
map()方法输出<key, value>对。 - 输出:写入本地磁盘,按key分区(默认哈希分区)。
-
Shuffle阶段(核心,连接Map和Reduce):
- 作用:将Map阶段的输出按key分组、排序,并传输到对应的Reducer节点,确保相同key的数据发送到同一个Reducer。
- 流程:
- Partition:Mapper输出根据Partitioner(默认哈希)分配到不同Reducer。
- Sort:在Reducer端,对从不同Map拉取的数据按key排序(归并排序)。
- Merge:将排序后的数据合并成大的文件,供Reducer读取。
- Combiner(可选):在Mapper端本地预聚合,减少数据传输量(需满足结合律和交换律)。
-
Reduce阶段:
- 输入:Shuffle阶段传递的
<key, value列表>。 - 处理:Reducer通过
reduce()方法处理value列表,输出最终结果。 - 输出:写入HDFS(默认文本格式)。
- 输入:Shuffle阶段传递的
YARN的架构是什么?ResourceManager和NodeManager的作用是什么?
答案:
YARN(Yet Another Resource Negotiator)是Hadoop的资源管理框架,采用主从架构,由ResourceManager(RM)、NodeManager(NM)和ApplicationMaster(AM)组成。
-
ResourceManager(全局资源管理者):
- 资源分配:管理集群所有资源(CPU、内存),接收AM的资源请求,分配Container(资源容器)。
- 队列管理:通过队列(Capacity Scheduler/Fair Scheduler)实现资源隔离和公平分配。
- 监控集群:监控NM和AM状态,处理节点故障。
-
NodeManager(单节点资源管理者):
- 资源监控:监控本节点资源(CPU、内存),向RM汇报节点状态。
- Container管理:启动、监控Container,执行AM的任务指令(启动Map/Reduce Task)。
- 健康检查:维护节点健康状态,向RM汇报故障。
-
ApplicationMaster(任务协调者):
每个应用(如MapReduce、Spark)对应一个AM,负责向RM申请资源,向NM发送任务指令,监控任务执行,并向RM汇报进度。
Spark面试题
RDD的核心特性是什么?与DataFrame/Dataset的区别是什么?
答案:
RDD(Resilient Distributed Dataset,弹性分布式数据集)是Spark的核心抽象,具有以下特性:
- 只读:RDD中的数据不可变,所有操作均生成新的RDD(依赖关系)。
- 分区:数据被切分为多个分区(Partition),可并行处理。
- 弹性:通过血缘关系(Lineage)容错,数据丢失时根据血缘重新计算。
- 分区函数:可通过
partitionBy等操作自定义分区策略。
与DataFrame/Dataset的区别:
| 特性 | RDD | DataFrame/Dataset |
|---------------------|-----------------------------|----------------------------------|
| 数据类型 | JVM对象(如String、Int) | 结构化数据(Schema定义) |
| 执行优化 | 依赖开发者手动优化 | Catalyst优化器自动优化(谓词下推、列裁剪) |
| 序列化 | Java/Kryo序列化 | Tungsten二进制格式(高效内存管理) |
| API友好性 | 函数式编程(`map


还没有评论,来说两句吧...