Hadoop 概述

Hadoop = 存储 + 资源管理 + 分布式计算

集群配置示例:48核CPU / 256GB内存 / 每台24TB存储(36TB总容量)

一、HDFS 高可用架构

HDFS(Hadoop Distributed File System)采用高可用(HA)架构,确保文件系统的持续可用性。

1、NameNode(NN)

主备模式:Active(a)和 Standby(s)

核心职责

  • 管理 HDFS 的目录树与文件元数据
  • 元数据以 namespace image(fsimage)和 edit log 文件形式存储在本地磁盘
  • 这些文件在 HDFS 每次重启时重新构建

Standby NameNode 功能:定期合并 fsimage 和 editlog,生成新的 fsimage,防止 editlog 过大导致 NameNode 启动时间过长。

NameNode 具体功能

  1. 管理文件系统名称空间:维护目录结构和文件元数据
  2. 管理客户端对数据的读写请求:处理客户端的数据访问操作
  3. 管理数据块到 DataNode 的映射关系:跟踪数据块在集群中的位置
  4. 管理副本策略:当某个 DataNode 宕机或数据块损坏时,NameNode 触发数据块的复制
  5. 负载均衡:指导数据在集群中均匀分布
  6. 心跳机制:通过心跳与 DataNode 保持通信,监控节点状态
  7. 元数据持久化:为保障故障后可恢复,NameNode 将元数据保存在本地磁盘

2、DataNode(DN)

存放文件实际数据的节点,会定时将 block 的列表汇报给 NameNode,默认6h。

  2.1 块报告包含:

    2.11 数据块ID(每一个hdfs数据块的唯一编码);

    2.12 块的版本号(生成戳,用于识别块版本,处理复制、损坏、截断、恢复场景);

    2.13 块的长度(当前数据块的实际字节大小);

    2.14 块状态标记(正常完好块、损坏块、正在写入块、已删除但还未清理的块);

    2.15 存储层信息(DN可以有多块磁盘/多个存储目录,每个存储有唯一的UUID,告诉NN,这个块存放在本DN的哪一块磁盘存储上);

    2.16 存储类型信息(HDD/SSD 内存存储);

3、JournalNode(JN)

NameNode 间通信的中间件:

  • Active NameNode 命名空间发生变化时告知 JournalNode
  • Standby NameNode 从 JournalNode 读取 editlog
  • 监控 editlog 变化,并应用于自身状态

4、ZKFC(ZooKeeper Failover Controller)

监控 NameNode 状态:

  • 当 Active NameNode 异常时,断开与 ZooKeeper 的连接,释放锁
  • Standby NameNode 抢锁,完成 NameNode 切换

5、其他 HDFS 组件

  • HTTPS:提供安全的通信通道
  • Balance:磁盘数据均衡工具

二、YARN 资源管理

YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理系统。

1、ResourceManager(RM)

主备模式:Active(a)和 Standby(s)

核心职责:负责集群资源管理和调度,接收作业,分配资源

1.1 Application Manager
  • 管理监控各个应用系统
  • 启动 Application Master(AM)
  • 监控 AM 的运行状态
  • 跟踪分配给 AM 的进度和状态
1.2 Scheduler

  分配 container 给 application master

  分配算法

  • 公平调度(Fair Scheduler):动态平衡资源,适合多租户场景
  • 先进先出(FIFO Scheduler):简单队列,存在资源饥饿问题
  • 容量调度(Capacity Scheduler):多用户/部门共享集群,集群资源划分为多个逻辑队列

2、NodeManager(NM)

负责节点资源管理、任务启动、上报资源:

     2.1 资源汇报:定期向 ResourceManager 汇报本节点的资源使用情况,分配资源给 AM

     2.2 任务管理:管理 AM 提交来的 task,例如接收 AM 启动与停止 task 的请求,由 ContainersLauncher 完成

3、Application Master(AM)

用户提交的每个 program 都会对应 1 个 AM:

  • 负责监控应用
  • 任务容错(重启失败的 task)
  • 与 ResourceManager 和 NodeManager 交互
  • 向 ResourceManager 申请资源
  • 请求 NodeManager 启动/提交 task

4、Container

资源调度的基本单位,是内存、CPU、磁盘、IO 的集合:

  • AM 会给 task 分配 Container
  • task 只能使用分配给它的 Container 资源

5、YARN 调度流程

完整调度流程

  1. Client 提交作业给 Yarn
  2. ResourceManager 接收作业,分配 Container 启动 ApplicationMaster
  3. ApplicationMaster 向 ResourceManager 注册并申请资源
  4. ResourceManager 根据调度策略,分配 Container 给 ApplicationMaster
  5. ApplicationMaster 根据资源在 NodeManager 启动 Container
  6. Container 中运行具体的 task
  7. 全部任务结束,AM 向RM注销,进程退出

简化表示

client → yarn -> RM → Container → AM →  RM → Container → AM -> NM-> C -> task

更多推荐