Hadoop 技术架构是一个分布式系统基础架构,由 Apache 基金会开发,主要用于存储和处理大规模数据集,其核心设计理念是通过廉价硬件构建高容错、高可扩展性的数据存储与计算平台,解决了传统单机架构在数据量激增场景下的性能瓶颈问题,Hadoop 技术架构以 HDFS(分布式文件系统)和 MapReduce(分布式计算框架)为核心,并逐步扩展至 YARN(资源管理框架)、HBase(分布式数据库)、Hive(数据仓库工具)等多个组件,形成完整的大数据处理生态系统。

Hadoop 技术架构的核心组件
Hadoop 技术架构的设计遵循“分而治之”的思想,通过将任务拆分并分配到多个节点并行执行,实现高效数据处理,其核心组件包括 HDFS、MapReduce、YARN,以及围绕这些组件构建的各类工具与服务。
HDFS(Hadoop Distributed File System,分布式文件系统)
HDFS 是 Hadoop 的存储基石,专为大规模数据设计,具有高容错、高吞吐量的特点,其架构由 NameNode(主节点)和 DataNode(从节点)组成:
- NameNode:负责管理文件系统的元数据,包括文件名、目录结构、文件块与 DataNode 的映射关系等,它维护着两个核心文件:FsImage(文件系统镜像,存储完整的元数据状态)和 EditLog(操作日志,记录元数据的变更操作),NameNode 是单点故障风险点,通常通过 Secondary NameNode(辅助节点)定期合并 FsImage 和 EditLog,或通过 HA(高可用)方案(如 QJM 共享存储机制)实现容错。
- DataNode:负责实际存储数据块,每个数据块默认大小为 128MB(可配置),DataNode 会定期向 NameNode 汇报自身存储的数据块列表,确保 NameNode 掌握整个集群的存储状态,当 DataNode 故障时,NameNode 会检测到数据块副本不足,并触发数据复制机制,将数据块复制到其他健康的 DataNode,保证数据可靠性。
HDFS 的数据存储采用多副本机制(默认 3 副本),分布在不同机架的 DataNode 上,既提高了数据容错能力,也通过机架感知策略优化数据读取的本地性,减少跨机架网络传输。
MapReduce(分布式计算框架)
MapReduce 是 Hadoop 的原始计算模型,用于并行处理大规模数据集,其核心思想是将计算任务拆分为 Map(映射)和 Reduce(规约)两个阶段,并通过分布式执行实现高效计算:

- Map 阶段:输入数据被切分成多个 Split(数据分片),每个 Split 由一个 Map Task 处理,Map Task 读取输入数据,进行键值对映射,输出中间结果。
- Shuffle 阶段:Map 输出的中间结果经过分区、排序、合并等操作,按 Key 分组并传输到对应的 Reduce Task。
- Reduce 阶段:Reduce Task 接收分组后的中间数据,进行聚合计算,输出最终结果。
MapReduce 的优势在于任务的自动调度、容错处理(Task 失败时重新调度)和负载均衡,但其编程模型较为复杂,且迭代计算性能较差,后续逐渐被 Spark 等更高效的计算框架补充或替代。
YARN(Yet Another Resource Negotiator,资源管理框架)
YARN 是 Hadoop 2.0 引入的资源管理器,负责集群资源的统一调度和任务监控,解决了早期 MapReduce 架构中 JobTracker 既负责任务调度又负责任务监控的资源瓶颈问题,YARN 架构由 ResourceManager(全局资源管理器)和 NodeManager(节点资源管理器)组成:
- ResourceManager:集群的资源总管,负责资源分配和任务调度,它接收客户端提交的应用程序,根据资源需求分配 Container(容器,包含 CPU、内存等资源),并监控应用程序的运行状态。
- NodeManager:单个工作节点的资源管家,负责管理本节点的资源,向 ResourceManager 汇报资源使用情况,并执行 Container 的启动、监控和销毁。
- ApplicationMaster:每个应用程序对应一个 AM,负责与 ResourceManager 协商资源,并向 NodeManager 发放任务,监控任务的执行进度,AM 的设计实现了资源调度的多租户隔离,提高了集群资源利用率。
YARN 的引入使 Hadoop 从单一的计算框架演变为支持多种计算模型(如 MapReduce、Spark、Flink)的统一资源管理平台,增强了系统的灵活性和扩展性。
Hadoop 技术架构的扩展组件
除了核心组件,Hadoop 生态系统还包括多个扩展工具,覆盖数据存储、数据仓库、数据分析、数据流处理等多个场景,形成完整的大数据处理解决方案,以下是关键扩展组件的功能对比:

| 组件名称 | 主要功能 | 核心特点 | 典型应用场景 |
|---|---|---|---|
| HBase | 分布式、面向列的 NoSQL 数据库,支持实时读写 | 基于 HDFS 存储,支持高并发、低延迟访问,适用于海量结构化数据存储 | 电商订单存储、用户行为分析 |
| Hive | 构建在 Hadoop 上的数据仓库工具,提供 SQL 查询功能(HiveQL) | 将 SQL 转换为 MapReduce 或 Spark 任务执行,降低大数据分析门槛 | 离线数据分析、报表生成 |
| Pig | 数据流处理和分析工具,提供 Pig Latin 脚本语言 | 适用于复杂数据转换流程,支持 UDF(用户自定义函数) | ETL 数据处理、日志分析 |
| ZooKeeper | 分布式协调服务,提供配置管理、命名服务、分布式锁等功能 | 高可用、强一致性,是 Hadoop 集群的基础组件 | HBase HA、Kafka 集群协调 |
| Flume | 分布式日志采集系统,支持实时数据从源头(如日志文件)传输到 HDFS/HBase | 可扩展、高可靠,支持多种数据源和传输协议(如 HTTP、Avro) | 实时日志采集、用户行为数据收集 |
| Spark | 内存分布式计算框架,支持批处理、流处理、机器学习和图计算 | 基于 YARN 调度,利用内存加速计算,性能比 MapReduce 高 10-100 倍 | 实时数据分析、机器学习模型训练 |
| Sqoop | 用于 Hadoop 与关系型数据库(如 MySQL、Oracle)之间的数据导入导出 | 支持全量数据迁移和增量数据同步,保证数据一致性 | 关系型数据与 Hadoop 数据同步 |
Hadoop 技术架构的工作流程
以一个典型的离线数据分析任务为例,Hadoop 技术架构的工作流程如下:
- 数据采集:通过 Flume 采集业务系统日志,实时存储到 HDFS 中;或通过 Sqoop 将关系型数据库的业务数据导入 HDFS。
- 数据存储:数据以文件形式存储在 HDFS 上,NameNode 记录元数据,DataNode 分布存储数据块副本。
- 资源调度:客户端向 YARN 的 ResourceManager 提交分析任务(如 HiveQL 查询),ResourceManager 根据集群资源分配 Container,并启动 ApplicationMaster。
- 任务执行:ApplicationMaster 与 NodeManager 协商资源,启动 MapReduce 或 Spark Task,Map Task 从 HDFS 读取数据并处理,输出中间结果;Shuffle 阶段对中间结果排序;Reduce Task 聚合数据并输出最终结果到 HDFS。
- 结果输出:分析结果存储在 HDFS 中,可通过 Hive 查询或导出到关系型数据库供业务系统使用。
Hadoop 技术架构的优势与挑战
优势
- 高可扩展性:通过横向扩展节点(增加 DataNode 和 NodeManager),可轻松扩展存储容量和计算能力,支持 PB 级数据存储。
- 高容错性:HDFS 的多副本机制和 YARN 的任务重试机制,确保硬件故障时数据不丢失、任务可恢复。
- 成本效益:基于廉价商用硬件构建,降低了大数据基础设施的硬件成本。
- 生态丰富:支持多种数据处理工具,满足批处理、流处理、机器学习等多样化需求。
挑战
- 低延迟问题:HDFS 适合高吞吐量场景,但随机读写和低延迟访问能力较弱,不适合实时事务处理。
- 小文件问题:HDFS 中大量小文件会占用 NameNode 内存,降低系统性能,可通过 HAR(Hadoop Archive)或 SequenceFile 合并小文件优化。
- 运维复杂:集群规模扩大后,节点管理、资源调优、故障排查等运维工作复杂度增加,需借助 Ambari、Cloudera Manager 等工具简化运维。
相关问答 FAQs
Q1:Hadoop 与 Spark 有什么区别?为什么很多企业同时使用两者?
A:Hadoop 和 Spark 都是分布式计算框架,但核心设计理念不同:Hadoop 的 MapReduce 基于磁盘计算,适合离线批处理,迭代性能较差;Spark 基于内存计算,支持实时流处理(Spark Streaming)、机器学习(MLlib)和图计算(GraphX),性能更高,企业同时使用两者,通常是将 Hadoop 作为底层存储(HDFS)和资源管理(YARN)平台,利用 Spark 处理需要高实时性和复杂计算的任务,发挥 Hadoop 的存储优势和 Spark 的计算优势。
Q2:Hadoop 集群中 NameNode 的单点故障问题如何解决?
A:NameNode 是 HDFS 的核心元数据节点,其故障会导致整个集群不可用,解决单点故障的方案主要有两种:
- HA(High Availability)方案:基于 QJM(Quorum Journal Manager)共享存储机制,部署两个 NameNode(Active 和 Standby),通过 ZKFC(ZooKeeper Failover Controller)实现故障自动切换,Active NameNode 的元数据实时同步到 Standby NameNode,确保故障时快速恢复服务。
- CMM(Checkpoint Node)方案:通过 Secondary NameNode 定期合并 FsImage 和 EditLog,生成新的 FsImage,并手动恢复到新的 NameNode,但此方案无法实现自动故障切换,仅适用于非核心场景,目前主流方案是基于 HA + ZK 的架构,确保 NameNode 的高可用性。
