大数据领域开山鼻祖组件Hadoop核心架构设计

一、Hadoop的整体架构

Hadoop是一个专为大数据设计的架构解决方案,历经多年开发演进,已逐渐发展成为一个庞大且复杂的系统。其内部工作机制融合了分布式理论与具体工程开发的精髓,构成了一个整体架构。

Hadoop最朴素的原理在于,它利用大量的普通计算机来处理大规模数据的存储和分析任务,而非依赖于单一的超级计算机。这一设计理念不仅降低了硬件成本,还通过分布式处理提高了系统的可扩展性和容错性。

Hadoop作为大数据处理领域的基石性架构,其设计理念体现了"分而治之"的分布式计算哲学。经过十余年的技术演进,Hadoop已从最初的单一计算框架发展为包含存储、资源管理、计算引擎等完整组件的生态系统,其架构复杂度反映了分布式系统理论与工程实践的深度融合。

Hadoop 系统的一个架构图,现在已经有了非常多的组件,但最核心的两部分依然是底层的文件系统 HDFS和用于计算的 MapReduce。来看下 Hadoop 系统中的一些重要组成部分。

二、HDFS(分布式文件系统)

HDFS 主要有 NameNode、DataNode、Secondary NameNode 三大组件:

  • NameNode

    • 管理文件系统的命名空间
    • 协调客户端对文件的访问
    • 存储文件系统的元数据
  • Secondary NameNode

    • 定期合并NameNode的编辑日志和镜像文件,减少NameNode启动时间
    • 提供NameNode的备份,但不用于故障切换
  • DataNode

    • 存储实际的数据块
    • 执行数据的读写操作
    • 定期向NameNode报告其存储的数据块信息

Primary Namenode 与 Secondary Namenode

三、MapReduce(分布式计算框架)

MapReduce 核心思想:分而治之的并行计算

3.1 拆分(Split)→ 并行计算(Map)‌

  • 输入数据被自动切割为 ‌分片(Split)‌(默认与 HDFS Block 对齐) → 分发到集群节点‌。
  • ‌Map 阶段‌:每个节点对本地数据执行相同的用户自定义函数,输出中间键值对 (key, value)。

👉 实质:将大规模问题分解为独立子问题

3.2 聚合(Shuffle)→ 归约(Reduce)

  • ‌Shuffle 阶段‌:框架按 key 将中间结果跨节点分组、排序、传输(核心瓶颈)‌。
  • ‌Reduce 阶段‌:相同 key 的数据发送到同一节点,执行归约逻辑(如求和、去重)。

👉 实质:合并子问题的结果生成全局解

MapReduce Split

MapReduce Shuffle

四、Yarn(资源调度与管理框架)

老周在之前讲解Flink架构的时候讲过YARN集群架构,我这里直接拿我之前Yarn的架构图。YARN集群总体上是经典的主/从(Master/Slave)架构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。

4.1 ResourceManager

以后台进程的形式运行,负责对集群资源进行统一管理和任务调度。ResourceManager的主要职责如下:

  • 接收来自客户端的请求。
  • 启动和管理各个应用程序的ApplicationMaster。
  • 接收来自ApplicationMaster的资源申请,并为其分配Container。
  • 管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报。

4.2 NodeManager

集群中每个节点上的资源和任务管理器,以后台进程的形式运行。它会定时向ResourceManager汇报本节点上的资源(内存、CPU)使用情况和各个Container的运行状态,同时会接收并处理来自ApplicationMaster的Container启动/停止等请求。NodeManager不会监视任务,它仅监视Container中的资源使用情况,例如。如果一个Container消耗的内存比最初分配的更多,就会结束该Container。

4.3 Task

应用程序具体执行的任务。一个应用程序可能有多个任务,例如一个MapReduce程序可以有多个Map任务和多个Reduce任务。

4.4 Container

YARN中资源分配的基本单位,封装了CPU和内存资源的一个容器,相当于一个Task运行环境的抽象。从实现上看,Container是一个Java抽象类,定义了资源信息。应用程序的Task将会被发布到Container中运行,从而限定了Task使用的资源量。

一个应用程序所需的Container分为两类:运行ApplicationMaster的Container和运行各类Task的Container。前者是由ResourceManager向内部的资源调度器申请和启动的,后者是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster请求NodeManager进行启动。

我们可以将Container类比成数据库连接池中的连接,需要的时候进行申请,使用完毕后进行释放,而不需要每次独自创建。

4.5 ApplicationMaster

ApplicationMaster可在Container内运行任何类型的Task。例如,MapReduce ApplicationMaster请求一个容器来启动Map Task或Reduce Task。也可以实现一个自定义的ApplicationMaster来运行特定的Task,以便任何分布式框架都可以受YARN支持,只要实现了相应的ApplicationMaster即可。

我们可以这样认为:ResourceManager管理整个集群,NodeManager管理集群中的单个节点,ApplicationMaster管理单个应用程序(集群中可能同时有多个应用程序在运行,每个应用程序都有各自的ApplicationMaster)。

YARN集群中应用程序的执行流程如下图所示:

  • 客户端提交应用程序(可以是MapReduce程序、Spark程序等)到ResourceManager。
  • ResourceManager分配用于运行ApplicationMaster的Container,然后与NodeManager通信,要求它在该Container中启动ApplicationMaster。ApplicationMaster启动后,它将负责此应用程序的整个生命周期。
  • ApplicationMaster向ResourceManager注册(注册后可以通过ResourceManager查看应用程序的运行状态)并请求运行应用程序各个Task所需的Container(资源请求是对一些Container的请求)。如果符合条件,ResourceManager会分配给ApplicationMaster所需的Container(表达为Container ID和主机名)。
  • ApplicationMaster请求NodeManager使用这些Container来运行应用程序的相应Task(即将Task发布到指定的Container中运行)。

此外,各个运行中的Task会通过RPC协议向ApplicationMaster汇报自己的状态和进度,这样一旦某个Task运行失败,ApplicationMaster就可以对其重新启动。当应用程序运行完成时,ApplicationMaster会向ResourceManager申请注销自己。

五、Hadoop HA


问题1:两个NameNode主节点,谁是Active,谁是Standby?

利用Zookeeper进行选举

问题2:怎么实现的?

  • 每一个NameNode都有一个ZKFC:Zookeeper Failover Contorller
  • 功能
    • 负责帮助NameNode向Zookeeper进行注册选举,并且监听active的NameNode
    • 负责监控NameNode的状态

问题3:如果有两个NameNode,客户端如何知道谁是active?

  • 客户端只能请求active状态的NameNode
  • 一旦配置了HA,将两个NameNode构建成一个整体
  • 客户端不用再请求单个NameNode,请求这个整体,这个整体负责从zookeeper中找到谁是active转发这个请求

问题4:如果有两个NameNode,所有的DataNode向哪个NameNode进行注册呢?

两个NameNode 都注册,只有active的能管理。

问题5:一个是active,一个standby,如果active宕机,standby接替active,如何保证standby的元数据与active是一致的?

  • journalnode日志节点
  • active状态的 NN,会将自己元数据的变化日志edits文件写入journalnode集群
  • standby状态的NN,会从journalnode集群中将变化读取出来,对自己操作,保证自己的元数据与active的元数据是一致的

六、HDFS Architecture

6.1 NameNode and DataNodes

6.2 Data Replication

相关推荐
拓端研究室2 小时前
专题:2025机器人产业深度洞察报告|附136份报告PDF与数据下载
大数据·人工智能·物联网
阿里云大数据AI技术3 小时前
NL2SQL 再创佳绩!阿里云论文中选 SIGMOD 2025
大数据·人工智能·云计算
庄小焱5 小时前
【离线数仓项目】——电商域ADS层开发实战
大数据
庄小焱5 小时前
【离线数仓项目】——离线大数据系统设计
大数据
吃手机用谁付的款6 小时前
基于hadoop的竞赛网站日志数据分析与可视化(下)
大数据·hadoop·python·信息可视化·数据分析
线条17 小时前
Spark 单机模式安装与测试全攻略
大数据·分布式·spark
TDengine (老段)12 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Deng94520131413 小时前
基于大数据的电力系统故障诊断技术研究
大数据·matplotlib·深度特征提取·随机森林分类算法·标签编码
小菜鸡062616 小时前
FlinkSQL通解
大数据·flink