大厂Hadoop(hdfs)面试题汇总及参考答案
Hadoop 有哪些组件?请简要介绍
Hadoop 是一个由多个核心组件构成的分布式计算框架,每个组件负责不同的功能模块,共同支持大规模数据处理。以下是主要组件及其核心作用:
- HDFS(Hadoop Distributed File System)HDFS 是 Hadoop 的分布式文件系统,专为存储超大规模数据而设计。其核心特性包括:分块存储:文件被分割为固定大小的块(默认 128MB 或 256MB),分散存储在不同节点上。高容错性:通过多副本机制(默认 3 副本)确保数据可靠性。主从架构:包含 NameNode(管理元数据)和 DataNode(存储实际数据块)。
- YARN(Yet Another Resource Negotiator)YARN 是 Hadoop 的资源管理框架,负责集群资源的调度和任务协调:ResourceManager:全局资源管理器,分配集群资源。NodeManager:单个节点上的资源代理,监控容器(Container)的资源使用。ApplicationMaster:每个应用程序的专属管理器,负责与 ResourceManager 协商资源,并跟踪任务状态。
- MapReduceMapReduce 是 Hadoop 的分布式计算模型,分为 Map 和 Reduce 两个阶段:Map 阶段:对输入数据进行并行处理,生成键值对形式的中间结果。Reduce 阶段:对中间结果进行汇总和聚合,输出最终结果。
- Hadoop Common提供 Hadoop 各模块依赖的基础库和工具,例如配置文件管理、安全认证和日志处理。
生态系统扩展组件(非核心但常用):
- HBase:基于 HDFS 的分布式 NoSQL 数据库,支持实时读写。
- Hive:数据仓库工具,提供类 SQL 查询接口(HQL)。
- Spark:内存计算框架,兼容 Hadoop 数据源,常用于迭代计算。
请描述 Hadoop 的运行逻辑
Hadoop 的运行逻辑围绕 分布式存储 和 并行计算 展开,核心流程分为以下步骤:
- 数据输入与分片用户提交数据到 HDFS,文件被分割为多个块(Block),每个块存储在不同 DataNode 上。NameNode 记录文件与块的映射关系,DataNode 负责实际存储。
- 提交 MapReduce 作业用户编写 Map 和 Reduce 函数,打包为作业(Job)提交到 YARN。ResourceManager 接收作业,分配容器资源并启动 ApplicationMaster。
- Map 阶段执行ApplicationMaster 向 ResourceManager 申请资源,调度 Map 任务到多个 NodeManager。每个 Map 任务读取输入块,执行用户定义的 Map 函数,生成中间键值对。
- Shuffle 与 SortMap 任务的输出经过 Partitioner 按 Key 分发给对应的 Reduce 任务。中间数据在传输前会按 Key 排序,确保 Reduce 阶段有序处理。
- Reduce 阶段执行Reduce 任务接收同一 Key 的所有值,执行聚合或计算逻辑,生成最终结果。结果写入 HDFS,默认存储为 part-r-00000 等格式的文件。
关键特性:
- 数据本地性:任务优先调度到存储数据的节点,减少网络传输开销。
- 容错机制:任务失败时自动重试,节点故障时由其他副本提供服务。
Hadoop 的工作原理是什么
Hadoop 的工作原理基于 分布式存储 和 并行计算框架,核心机制包括:
- HDFS 数据存储机制写流程:客户端将文件分块后,NameNode 返回可写入的 DataNode 列表;数据通过流水线方式写入多个副本。读流程:客户端从 NameNode 获取块位置信息,直接与 DataNode 通信读取数据。
- MapReduce 计算模型分而治之:将大数据集拆分为小任务并行处理。Combiner 优化:在 Map 端局部聚合数据,减少 Shuffle 阶段的数据传输量。
- YARN 资源调度双层调度:ResourceManager 分配资源给 ApplicationMaster,后者进一步分配资源给具体任务。队列管理:支持多租户资源隔离,例如通过 Capacity Scheduler 或 Fair Scheduler。
容错与恢复:
- NameNode 元数据备份:通过 FsImage(镜像文件)和 EditLog(操作日志)恢复元数据。
- Task 重试:若某个 Map 或 Reduce 任务失败,YARN 会自动在其他节点重启该任务。
Hadoop 运行模式有哪些
Hadoop 支持多种运行模式,适用于不同场景:
本地模式(Local) |
所有组件(如 NameNode、DataNode)在单个 JVM 中运行,不使用 HDFS。 |
开发调试、单元测试 |
伪分布式模式 |
所有守护进程(NameNode、DataNode、ResourceManager 等)在同一台机器上运行。 |
学习与功能验证 |
完全分布式模式 |
组件分布在多台机器上,形成真正的集群环境。 |
生产环境大规模数据处理 |
高可用模式(HA) |
通过双 NameNode 和共享存储(如 QJM)实现主备切换,避免单点故障。 |
对服务连续性要求高的生产环境 |
选择依据:
- 资源需求:本地模式无需额外硬件,分布式模式需要多节点。
- 性能要求:完全分布式模式可横向扩展,支持 TB/PB 级数据处理。
Hadoop 的 HA 特性是什么?如何实现
Hadoop 的 高可用(High Availability, HA) 特性旨在消除单点故障,确保关键组件(如 NameNode 和 ResourceManager)在故障时快速恢复。
NameNode HA 实现
- 主备 NameNode 架构:Active NameNode:处理客户端请求,管理元数据。Standby NameNode:实时同步 Active NameNode 的元数据,准备接管服务。
- 共享存储(QJM):使用 Quorum Journal Manager(基于多个 JournalNode)存储 EditLog,确保主备节点元数据一致。写入 EditLog 需获得多数 JournalNode 的确认,避免脑裂问题。
- 故障切换控制器(ZKFC):通过 ZooKeeper 监控 NameNode 状态,触发主备切换。使用 Fencing 机制防止旧主节点继续写入数据(例如强制终止进程)。
ResourceManager HA 实现
- 主备 ResourceManager:通过 ZooKeeper 选举 Active 节点,备节点同步应用状态。
- 状态存储:应用元数据保存到 HDFS 或 ZooKeeper,确保故障后可恢复。
核心优势:
- 服务连续性:主节点故障时,备节点在秒级内接管服务。
- 数据一致性:通过共享存储和原子操作保证元数据完整。
Hadoop 的高可用性是如何实现的?
Hadoop 的高可用性(High Availability, HA)通过消除关键组件的单点故障来实现服务持续可用,核心集中在 NameNode 和 ResourceManager 的 HA 设计上。
NameNode HA 实现机制
- 主备节点架构:部署两个 NameNode,分别处于 Active(处理请求)和 Standby(热备份)状态。
- 共享存储同步:使用 Quorum Journal Manager (QJM) 管理 EditLog(操作日志),通过多个 JournalNode 节点确保日志写入的原子性和一致性。Active NameNode 将日志写入 JournalNode 集群,Standby 节点实时读取并应用这些日志以保持元数据同步。
- 故障自动切换:依赖 ZKFC(ZooKeeper Failover Controller) 监控 NameNode 健康状态。若 Active 节点失效,ZKFC 通过 ZooKeeper 触发选举,将 Standby 提升为 Active。
- 防护机制(Fencing):防止旧 Active 节点“僵尸化”,例如强制终止其进程或禁用网络端口。
ResourceManager HA 实现机制
- 主备 ResourceManager:通过 ZooKeeper 选举确定 Active 节点,备节点同步应用状态(如任务进度、资源分配)。
- 状态持久化:ResourceManager 将应用元数据存储到 HDFS 或 ZooKeeper,故障恢复后重新加载。
关键优势:
- 秒级切换:NameNode 故障恢复时间从数分钟缩短至秒级。
- 数据零丢失:QJM 确保元数据完整,避免因节点宕机导致数据不一致。
Hadoop1 和 Hadoop2 的区别是什么?
Hadoop2 是对 Hadoop1 的架构重构,核心差异体现在 资源管理、扩展性 和 功能增强 方面。
资源管理模型
- Hadoop1:采用 JobTracker/TaskTracker 架构,JobTracker 同时负责资源调度和任务监控,存在单点瓶颈和扩展性限制。
- Hadoop2:引入 YARN,将资源管理和任务调度分离。ResourceManager 全局管理资源,ApplicationMaster 负责单个应用的任务协调,支持多计算框架(如 Spark、Flink)共存。
HDFS 改进
- Hadoop1:NameNode 单点故障,仅支持单一命名空间。
- Hadoop2: HA 支持:通过主备 NameNode 实现故障自动切换。Federation:支持多个命名空间横向扩展,解决单 NameNode 内存瓶颈。
计算模型扩展性
- Hadoop1:仅支持 MapReduce,资源利用率低。
- Hadoop2:YARN 允许运行多种计算框架(如 Spark 的迭代计算、Storm 的流处理),提升集群利用率。
兼容性
- Hadoop2 兼容 Hadoop1 的 MapReduce API,但需调整作业配置以适配 YARN。
Hadoop3.0 相较于之前版本有哪些改进?
Hadoop3.0 在 存储效率、资源管理 和 稳定性 方面进行了重大升级。
存储优化:纠删码(Erasure Coding)
- 传统副本机制:存储开销大(默认 3 副本,空间利用率 33%)。
- 纠删码:将数据分块并生成校验块,空间利用率提升至 50%(如 6+3 编码),适用于冷数据存储。
多 NameNode 服务
- 支持 多个 Active NameNode,进一步扩展 HDFS 的命名空间和并发处理能力。
资源类型扩展
- YARN 支持 GPU 和 FPGA 等异构资源调度,满足机器学习等场景需求。
依赖升级与性能提升
- 最低 Java 版本:从 Java7 升级到 Java8,兼容性更强。
- MapReduce 优化:任务本地化执行减少数据拷贝开销。
- 时间轴服务 v2:改进时间轴数据存储(Timeline Service v2),支持更高效的应用日志管理。
其他改进
- Shell 脚本重构:用 Java 重写部分 Shell 脚本,增强跨平台兼容性。
- 客户端协议增强:支持 HTTPS 和访问控制列表(ACL)。
Hadoop 脑裂出现的原因是什么?
脑裂(Split-Brain)指集群中多个节点同时认为自己是主节点,导致数据冲突或服务混乱。在 Hadoop 中,脑裂通常与 HA 实现缺陷 或 配置错误 相关。
常见诱因
- 网络分区:主备 NameNode 之间的网络中断,导致 ZooKeeper 无法检测 Active 节点存活,错误触发备节点升主。
- 防护(Fencing)失效:旧 Active 节点未完全终止,继续响应客户端请求,与新 Active 节点同时写入数据。
- ZooKeeper 配置不当:会话超时时间设置过长,延迟了故障切换,加剧双主冲突风险。
解决方案
- 强制防护机制:通过 SSH 命令终止旧 Active 节点进程,或使用存储级防护(如拒绝旧节点写入 HDFS)。
- 合理配置超时参数:调整 ZooKeeper 会话超时为秒级(如 30 秒),快速检测节点故障。
- QJM 多数确认:EditLog 写入需获得半数以上 JournalNode 确认,避免网络分区导致数据不一致。
请介绍下 HDFS,说下 HDFS 优缺点以及使用场景
HDFS(Hadoop Distributed File System) 是 Hadoop 的分布式文件系统,专为 海量数据存储 和 批处理 设计。
核心架构
- NameNode:管理文件系统元数据(如文件目录结构、块位置),不存储实际数据。
- DataNode:存储数据块(Block),默认大小 128MB/256MB,通过多副本(默认 3)确保容错。
- 客户端:与 NameNode 交互获取元数据,直接与 DataNode 读写数据。
优点
- 高容错性:数据多副本存储,节点故障时自动切换副本。
- 高吞吐量:支持数据本地化计算,减少网络传输开销。
- 横向扩展:可通过增加节点轻松扩展至 PB 级存储。
- 成本低廉:基于普通硬件构建,适合海量数据存储。
缺点
- 低延迟访问差:不适合实时查询或频繁修改的场景(如数据库)。
- 小文件处理弱:大量小文件会耗尽 NameNode 内存,影响性能。
- 单点故障风险:非 HA 模式下 NameNode 宕机会导致集群不可用。
适用场景
- 大数据批处理:如日志分析、ETL 作业,配合 MapReduce 或 Spark 使用。
- 数据仓库:Hive 或 HBase 的底层存储,支持离线分析。
- 冷数据归档:纠删码技术可降低长期存储成本。
不适用场景
- 实时数据写入:如在线交易系统。
- 低延迟查询:需结合 HBase 或 Alluxio 等缓存层。
Hadoop 的高可用性是如何实现的?
Hadoop 的高可用性(High Availability, HA)通过消除关键组件的单点故障来实现服务持续可用,核心集中在 NameNode 和 ResourceManager 的 HA 设计上。
NameNode HA 实现机制
- 主备节点架构:部署两个 NameNode,分别处于 Active(处理请求)和 Standby(热备份)状态。
- 共享存储同步:使用 Quorum Journal Manager (QJM) 管理 EditLog(操作日志),通过多个 JournalNode 节点确保日志写入的原子性和一致性。Active NameNode 将日志写入 JournalNode 集群,Standby 节点实时读取并应用这些日志以保持元数据同步。
- 故障自动切换:依赖 ZKFC(ZooKeeper Failover Controller) 监控 NameNode 健康状态。若 Active 节点失效,ZKFC 通过 ZooKeeper 触发选举,将 Standby 提升为 Active。
- 防护机制(Fencing):防止旧 Active 节点“僵尸化”,例如强制终止其进程或禁用网络端口。
ResourceManager HA 实现机制
- 主备 ResourceManager:通过 ZooKeeper 选举确定 Active 节点,备节点同步应用状态(如任务进度、资源分配)。
- 状态持久化:ResourceManager 将应用元数据存储到 HDFS 或 ZooKeeper,故障恢复后重新加载。
关键优势:
- 秒级切换:NameNode 故障恢复时间从数分钟缩短至秒级。
- 数据零丢失:QJM 确保元数据完整,避免因节点宕机导致数据不一致。
Hadoop1 和 Hadoop2 的区别是什么?
Hadoop2 是对 Hadoop1 的架构重构,核心差异体现在 资源管理、扩展性 和 功能增强 方面。
资源管理模型
- Hadoop1:采用 JobTracker/TaskTracker 架构,JobTracker 同时负责资源调度和任务监控,存在单点瓶颈和扩展性限制。
- Hadoop2:引入 YARN,将资源管理和任务调度分离。ResourceManager 全局管理资源,ApplicationMaster 负责单个应用的任务协调,支持多计算框架(如 Spark、Flink)共存。
HDFS 改进
- Hadoop1:NameNode 单点故障,仅支持单一命名空间。
- Hadoop2: HA 支持:通过主备 NameNode 实现故障自动切换。Federation:支持多个命名空间横向扩展,解决单 NameNode 内存瓶颈。
计算模型扩展性
- Hadoop1:仅支持 MapReduce,资源利用率低。
- Hadoop2:YARN 允许运行多种计算框架(如 Spark 的迭代计算、Storm 的流处理),提升集群利用率。
兼容性
- Hadoop2 兼容 Hadoop1 的 MapReduce API,但需调整作业配置以适配 YARN。
Hadoop3.0 相较于之前版本有哪些改进?
Hadoop3.0 在 存储效率、资源管理 和 稳定性 方面进行了重大升级。
存储优化:纠删码(Erasure Coding)
- 传统副本机制:存储开销大(默认 3 副本,空间利用率 33%)。
- 纠删码:将数据分块并生成校验块,空间利用率提升至 50%(如 6+3 编码),适用于冷数据存储。
多 NameNode 服务
- 支持 多个 Active NameNode,进一步扩展 HDFS 的命名空间和并发处理能力。
资源类型扩展
- YARN 支持 GPU 和 FPGA 等异构资源调度,满足机器学习等场景需求。
依赖升级与性能提升
- 最低 Java 版本:从 Java7 升级到 Java8,兼容性更强。
- MapReduce 优化:任务本地化执行减少数据拷贝开销。
- 时间轴服务 v2:改进时间轴数据存储(Timeline Service v2),支持更高效的应用日志管理。
其他改进
- Shell 脚本重构:用 Java 重写部分 Shell 脚本,增强跨平台兼容性。
- 客户端协议增强:支持 HTTPS 和访问控制列表(ACL)。
Hadoop 脑裂出现的原因是什么?
脑裂(Split-Brain)指集群中多个节点同时认为自己是主节点,导致数据冲突或服务混乱。在 Hadoop 中,脑裂通常与 HA 实现缺陷 或 配置错误 相关。
常见诱因
- 网络分区:主备 NameNode 之间的网络中断,导致 ZooKeeper 无法检测 Active 节点存活,错误触发备节点升主。
- 防护(Fencing)失效:旧 Active 节点未完全终止,继续响应客户端请求,与新 Active 节点同时写入数据。
- ZooKeeper 配置不当:会话超时时间设置过长,延迟了故障切换,加剧双主冲突风险。
解决方案
- 强制防护机制:通过 SSH 命令终止旧 Active 节点进程,或使用存储级防护(如拒绝旧节点写入 HDFS)。
- 合理配置超时参数:调整 ZooKeeper 会话超时为秒级(如 30 秒),快速检测节点故障。
- QJM 多数确认:EditLog 写入需获得半数以上 JournalNode 确认,避免网络分区导致数据不一致。
请介绍下 HDFS,说下 HDFS 优缺点以及使用场景
HDFS(Hadoop Distributed File System) 是 Hadoop 的分布式文件系统,专为 海量数据存储 和 批处理 设计。
核心架构
- NameNode:管理文件系统元数据(如文件目录结构、块位置),不存储实际数据。
- DataNode:存储数据块(Block),默认大小 128MB/256MB,通过多副本(默认 3)确保容错。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
17年+码农经历了很多次面试,多次作为面试官面试别人,多次大数据面试和面试别人,深知哪些面试题是会被经常问到。 在多家企业从0到1开发过离线数仓实时数仓等多个大型项目,详细介绍项目架构等企业内部秘不外传的资料,介绍踩过的坑和开发干货,分享多个拿来即用的大数据ETL工具,让小白用户快速入门并精通,指导如何入职后快速上手。 计划更新内容100篇以上,包括一些企业内部秘不外宣的干货,欢迎订阅!