Hadoop 核心架构与高可用性解析
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 具体功能
- 管理文件系统名称空间:维护目录结构和文件元数据
- 管理客户端对数据的读写请求:处理客户端的数据访问操作
- 管理数据块到 DataNode 的映射关系:跟踪数据块在集群中的位置
- 管理副本策略:当某个 DataNode 宕机或数据块损坏时,NameNode 触发数据块的复制
- 负载均衡:指导数据在集群中均匀分布
- 心跳机制:通过心跳与 DataNode 保持通信,监控节点状态
- 元数据持久化:为保障故障后可恢复,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 调度流程
完整调度流程:
- Client 提交作业给 Yarn
- ResourceManager 接收作业,分配 Container 启动 ApplicationMaster
- ApplicationMaster 向 ResourceManager 注册并申请资源
- ResourceManager 根据调度策略,分配 Container 给 ApplicationMaster
- ApplicationMaster 根据资源在 NodeManager 启动 Container
- Container 中运行具体的 task
- 全部任务结束,AM 向RM注销,进程退出
简化表示:
client → yarn -> RM → Container → AM → RM → Container → AM -> NM-> C -> task
更多推荐
所有评论(0)