大厂Hadoop(hdfs)面试题汇总及参考答案

Hadoop 有哪些组件?请简要介绍

Hadoop 是一个由多个核心组件构成的分布式计算框架,每个组件负责不同的功能模块,共同支持大规模数据处理。以下是主要组件及其核心作用:

  1. HDFS(Hadoop Distributed File System)HDFS 是 Hadoop 的分布式文件系统,专为存储超大规模数据而设计。其核心特性包括:分块存储:文件被分割为固定大小的块(默认 128MB 或 256MB),分散存储在不同节点上。高容错性:通过多副本机制(默认 3 副本)确保数据可靠性。主从架构:包含 NameNode(管理元数据)和 DataNode(存储实际数据块)。
  2. YARN(Yet Another Resource Negotiator)YARN 是 Hadoop 的资源管理框架,负责集群资源的调度和任务协调:ResourceManager:全局资源管理器,分配集群资源。NodeManager:单个节点上的资源代理,监控容器(Container)的资源使用。ApplicationMaster:每个应用程序的专属管理器,负责与 ResourceManager 协商资源,并跟踪任务状态。
  3. MapReduceMapReduce 是 Hadoop 的分布式计算模型,分为 Map 和 Reduce 两个阶段:Map 阶段:对输入数据进行并行处理,生成键值对形式的中间结果。Reduce 阶段:对中间结果进行汇总和聚合,输出最终结果。
  4. Hadoop Common提供 Hadoop 各模块依赖的基础库和工具,例如配置文件管理、安全认证和日志处理。

生态系统扩展组件(非核心但常用):

  • HBase:基于 HDFS 的分布式 NoSQL 数据库,支持实时读写。
  • Hive:数据仓库工具,提供类 SQL 查询接口(HQL)。
  • Spark:内存计算框架,兼容 Hadoop 数据源,常用于迭代计算。

请描述 Hadoop 的运行逻辑

Hadoop 的运行逻辑围绕 分布式存储并行计算 展开,核心流程分为以下步骤:

  1. 数据输入与分片用户提交数据到 HDFS,文件被分割为多个块(Block),每个块存储在不同 DataNode 上。NameNode 记录文件与块的映射关系,DataNode 负责实际存储。
  2. 提交 MapReduce 作业用户编写 Map 和 Reduce 函数,打包为作业(Job)提交到 YARN。ResourceManager 接收作业,分配容器资源并启动 ApplicationMaster。
  3. Map 阶段执行ApplicationMaster 向 ResourceManager 申请资源,调度 Map 任务到多个 NodeManager。每个 Map 任务读取输入块,执行用户定义的 Map 函数,生成中间键值对。
  4. Shuffle 与 SortMap 任务的输出经过 Partitioner 按 Key 分发给对应的 Reduce 任务。中间数据在传输前会按 Key 排序,确保 Reduce 阶段有序处理。
  5. Reduce 阶段执行Reduce 任务接收同一 Key 的所有值,执行聚合或计算逻辑,生成最终结果。结果写入 HDFS,默认存储为 part-r-00000 等格式的文件。

关键特性

  • 数据本地性:任务优先调度到存储数据的节点,减少网络传输开销。
  • 容错机制:任务失败时自动重试,节点故障时由其他副本提供服务。

Hadoop 的工作原理是什么

Hadoop 的工作原理基于 分布式存储并行计算框架,核心机制包括:

  1. HDFS 数据存储机制写流程:客户端将文件分块后,NameNode 返回可写入的 DataNode 列表;数据通过流水线方式写入多个副本。读流程:客户端从 NameNode 获取块位置信息,直接与 DataNode 通信读取数据。
  2. MapReduce 计算模型分而治之:将大数据集拆分为小任务并行处理。Combiner 优化:在 Map 端局部聚合数据,减少 Shuffle 阶段的数据传输量。
  3. 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 实现

  1. 主备 NameNode 架构:Active NameNode:处理客户端请求,管理元数据。Standby NameNode:实时同步 Active NameNode 的元数据,准备接管服务。
  2. 共享存储(QJM):使用 Quorum Journal Manager(基于多个 JournalNode)存储 EditLog,确保主备节点元数据一致。写入 EditLog 需获得多数 JournalNode 的确认,避免脑裂问题。
  3. 故障切换控制器(ZKFC):通过 ZooKeeper 监控 NameNode 状态,触发主备切换。使用 Fencing 机制防止旧主节点继续写入数据(例如强制终止进程)。

ResourceManager HA 实现

  • 主备 ResourceManager:通过 ZooKeeper 选举 Active 节点,备节点同步应用状态。
  • 状态存储:应用元数据保存到 HDFS 或 ZooKeeper,确保故障后可恢复。

核心优势

  • 服务连续性:主节点故障时,备节点在秒级内接管服务。
  • 数据一致性:通过共享存储和原子操作保证元数据完整。

Hadoop 的高可用性是如何实现的?

Hadoop 的高可用性(High Availability, HA)通过消除关键组件的单点故障来实现服务持续可用,核心集中在 NameNodeResourceManager 的 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)通过消除关键组件的单点故障来实现服务持续可用,核心集中在 NameNodeResourceManager 的 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篇以上,包括一些企业内部秘不外宣的干货,欢迎订阅!

全部评论

相关推荐

05-02 01:34
已编辑
蚌埠坦克学院 Java
3.18 零一悦动一面(25min)1.自我介绍2.实习项目介绍:实习前后端都自己写吗?实习中数据库是自己设计吗?3.java数据类型4.异常类型(忘了)5.数据库的事务讲一下6.索引使用上有什么问题要注意7.Bean的生命周期7.消息队列讲一下,消息队列的优缺点,说了异步,解耦,还有短链接里面怎么用的,优缺点回答的是解耦性能好,缺点是太重了,并发量达不到就不用8.JVM垃圾回收(说还不熟悉)6.高并发的情况下如何处理(感觉问的很笼统)回答了使用redis做缓存,缓存三大问题,还有使用mq做异步,用sentienl做限流7.排序算法和时间复杂度空间复杂度8.深度优先和广度优先9.讲一下动态规划10,你最近怎么学习一门新技术11.你觉得ai怎么样12.你的职业规划反问:3天出结果,还有一轮面试后续:一面挂3.18 云测Testin一面(30min)1.自我介绍2.介绍一下实习做了什么3.实习的难点、遇到的困难4.Mysql索引怎么优化的,优化的3.2s怎么测的,实际数据怎么来的5.自己怎么学的技术6.redis缓存在实习中怎么使用的7.查询语句优化怎么优化的8.DB-router中aop遇到的切面失效的问题嘛?还有ThreadLocal底层还有用久了有什么问题嘛、10.算法刷了多少11.运维有做吗?Linux命令11.目前找实习的情况12.规划后续一面挂3.19 泛微网络一面(18min)1.自我介绍3.问实习干了啥,实习公司主要是做什么的4.技术面:5.SaaS短连接介绍一下6.redis怎么使用的?有哪些情况7.Sharding-jdbc是怎么使用的6.spring事务讲一下7.mysql了解哪些?讲了索引和事务8.什么是回表9.事务隔离级别讲一下后续:因为异地挂3.24 亚信科技(北京一面)15min1.自我介绍2.介绍一下SaaS短链接项目3.介绍一下DB-Router项目4.你实习用了Activity工作流,请问工作流中用户权限这块是怎么做的?(不太清楚)5.ArrayList和LinkedList的区别6.synochroniezd和lock的区别后续,oc已拒3.28 中点金信一面(25min)1.介绍公司的主要业务和工作形式2.自我介绍3.问实习做了啥4.问项目主要是干啥5.JVM了解吗?5.sql调优怎么调6.你自己遇到的问题是怎么解决的7.反问:主要办公形式:驻场二开后续:二面聊天二面挂:面评是对出差和加班有抵触心理,这个绷不住了4.09百应科技一面(25min)1.自我介绍(40s左右,之后扩展一些内容)2.介绍一下实习做的事情3.在处理多线程方面要注意哪些方面4.在Java里面还有什么实现锁的方式5.currentHashMap底层是如何实现的6.redis做发布订阅是如何选型的7.redis做发布订阅是如何解决丢失消息8.分布式事务如何做统一回滚的?9.redis集群的部署模式有几种?10.并发访问Mysql同一条记录的时候mysql锁机制如何运行的?11.Mysql事务隔离级别,不同隔离级别的差别是什么?12.Mysql主键索引和二级索引他们底层数据结构有什么不一样?13.有个场景:一条带普通索引的sql执行的整个流程是怎么样的?14.RocketMQ在broker是怎么存储消息的?(不是很清楚)15.rocketmq的重试策略和频率16.分布式锁用什么实现的?17.redis常用数据结构18.redis的set中nx和ex有什么不同19.redis主从集群中set一个数据在主从中是怎么存储的?20.jvm中新生代是通过什么策略迁移到老年代当中(不会)21.垃圾回收cms和g1有什么不同?22.线程池的一些框架是如何初始化和销毁线程的?一面挂4.08 高顿教育一面(20min)只记得一部分问题1、简单介绍一下路由组件的项目的流程2、mybatis缓存机制3、mybats组件拦截说一下4.ThreadLocal不会出现内存泄漏问题吗5.双重判定锁介绍一下6.线程安全的集合类有哪些7.StringBuffer和StringBuilder区别8.sleep和wait的区别9.MQ如何保证消息丢失问题和重复消费问题10.spring的bean是线程安全的吗?总结:很多问题口齿不清,逻辑不是很清楚,但是面试官那边麦也不清楚。高顿教育二面(20min)主要聊技术的学习还有本质(答得一塌糊涂),sql优化,redis集群,go和java的本质区别问有没有了解zoomkeeper、ES相关技术,一问三不知吹牛说RAG了解,结果问缩写是啥都不知道总结:问题问得很模糊很抽象,不知道他想问啥,回答的时候也经常被打断,吹牛RAG也吹大了后续oc已拒       
点赞 评论 收藏
分享
评论
1
10
分享

创作者周榜

更多
牛客网
牛客企业服务