初识Hadoop

一、引言

在之前的博客中,我们学习了Python数据分析、机器学习和深度学习。这些技术处理的数据量通常在GB级别,一台普通电脑就能胜任。但现实世界中,很多场景的数据量远超单机处理能力:

  • 电商平台的用户行为日志:每天TB级

  • 社交网络的图文视频:每天PB级

  • 科学实验的观测数据:每年EB级

当数据大到一台机器装不下、算不动时,怎么办?

答案是:分布式存储 + 分布式计算 。而Hadoop正是这套技术体系的奠基者。

Hadoop的核心由三大部分组成:

  • HDFS:分布式文件系统,解决数据存不下的问题

  • MapReduce:分布式计算框架,解决数据算不动的问题

  • YARN:资源调度平台,解决资源怎么分配的问题

本篇博客将系统讲解HDFS架构、读写流程、MapReduce原理和YARN资源调度,带你走进大数据的世界。

二、HDFS架构------分布式存储的基石

2.1 整体架构

HDFS(Hadoop Distributed File System) 是Hadoop的分布式文件系统,采用主从架构(Master/Slave) 设计。

HDFS集群由以下角色组成:

角色 定位 职责
Client(客户端) 用户接口 文件切分、与NN/DN交互、读写数据
NameNode(NN) 管理员(Master) 管理元数据、负责统一数据入口
DataNode(DN) 工作者(Slave) 存储实际数据块、执行读写操作
SecondaryNameNode(2NN) 辅助者 辅助NN,定期合并Fsimage和Edits

注意:集群一般是奇数台(如3台、5台),这是为了避免脑裂问题,便于选举。

2.2 NameNode

NameNode 是HDFS的核心,相当于一个管理员,它的作用包括:

  1. 管理HDFS的命名空间:维护文件系统的目录树结构

  2. 配置副本策略:决定每个数据块存几份、存在哪里

  3. 管理数据块(block)映射信息:记录每个块存储在哪些DataNode上

  4. 处理客户端的读写请求:作为统一的数据入口

元数据(Metadata) 是NN管理的核心内容,包括:

  • 文件名、目录结构

  • 文件属性(权限、创建时间等)

  • 每个文件被切分成哪些block

  • 每个block的副本存储在哪些DN上

关键点 :NN不存储实际数据,只存储元数据。实际数据由DN存储。

2.3 DataNode

DataNode 是实际存储数据的工作节点,相当于仓库管理员,职责包括:

  1. 存储实际的数据块:每个block默认128MB

  2. 执行数据块的读/写操作:响应Client的读写请求

  3. 定期向NN发送心跳:报告自己的状态和存储的block信息

数据块(Block) 是HDFS的基本存储单位:

版本 默认块大小
Hadoop 1.x 64MB
Hadoop 2.x/3.x 128MB

为什么块这么大?

  • 减少寻址开销(块越大,寻址时间占比越小)

  • 减少NN的元数据量(块越大,块数量越少)

2.4 SecondaryNameNode

很多人误以为SecondaryNameNode(2NN) 是NN的热备,这是错误的!

2NN的真正作用是:

  1. 辅助NN,分担其工作量:定期合并Fsimage和Edits文件

  2. 在紧急情况下可辅助恢复NN:但不是自动接管

Fsimage和Edits:

  • Fsimage:元数据的快照(某一时刻的完整元数据)

  • Edits:元数据的操作日志(记录所有写操作)

合并流程:

  1. 2NN定期从NN拉取Fsimage和Edits

  2. 2NN在本地合并两者,生成新的Fsimage

  3. 2NN将新Fsimage推送给NN

  4. NN用新Fsimage替换旧的,并清空Edits

为什么需要合并?

  • 如果只记录Edits,文件会无限增长

  • 定期合并可以保持元数据的简洁

2.5 客户端------用户的"操作台"

Client是用户与HDFS交互的接口,职责包括:

  1. 文件切分:上传文件时,将文件切成一个个block

  2. 与NN交互:获取文件的位置信息

  3. 与DN交互:读取或写入数据

  4. 提供命令 :如hdfs namenode -format(只允许执行一次)

  5. 访问HDFS:通过命令对HDFS增删改查

三、HDFS读流程

3.1 读流程步骤

步骤1:客户端发起下载请求

客户端通过Distributed FileSystem模块向NameNode请求下载文件。

步骤2:NameNode返回元数据

NameNode查询元数据信息,找到文件所在DataNode的地址,返回给客户端。

步骤3:请求读取数据块

客户端挑选一台DataNode(就近原则,然后随机),请求读取数据块。

步骤4:DataNode传输数据

DataNode从磁盘中读取数据,以Packet为单位做校验,传输给客户端。

步骤5:请求下一个数据块

客户端请求读取下一个数据块,流程同上。

步骤6:传输数据

第二个DataNode传输数据。

步骤7:读取完毕

客户端完成所有数据块的读取,告知NameNode读取完毕。

3.2 读流程关键点

关键点 说明
就近原则 客户端优先选择网络距离最近的DataNode
随机选择 如果多个DN距离相同,随机选一个
Packet校验 数据以Packet为单位传输,每包做校验
本地缓存 客户端先缓存在本地,再写入目标文件

3.3 副本的作用

HDFS的副本机制:

  • 默认每个block有3个副本

  • 副本分布在不同的DataNode上

  • 副本策略:机架感知(同一机架2个,不同机架1个)

副本的意义:

  • 容错:某个DN挂了,数据不丢失

  • 负载均衡:多个客户端可以读不同副本

  • 就近读取:客户端可以读最近的副本

四、HDFS写流程

4.1 写流程步骤

从" HDFS写流程"图中可以看到完整的写入过程:

步骤1:客户端发起上传请求

客户端通过Distributed FileSystem模块向NameNode请求上传文件(如/root/gateway_records.txt)。

步骤2:NameNode检查并响应

NameNode检查:

  • 检查目录是否可以创建

  • 检查权限

  • 检查目录结构(父目录是否存在)

然后向客户端返回是否可以上传。

步骤3:请求上传第一个Block

客户端请求上传第一个Block(0~128M),询问上传到哪几个DataNode。

步骤4:NameNode返回DN列表

NameNode返回三个DataNode节点(DN1、DN2、DN3),表示这三个节点都可以存储。

步骤5:建立Block传输通道

客户端通过FSDataOutputStream模块请求DataNode1上传数据,DN1收到请求后会继续调用DN2,DN2继续调用DN3,将通信通道建立完成。

步骤6:DN逐级应答

DN1→DN3逐级应答客户端,通道建立完成。

步骤7:传输数据

客户端开始往DN1上传第一个Block:

  • 先从磁盘读取数据放到本地内存缓存

  • 以Packet为单位传输(每个Packet 64KB)

  • DN1收到一个Packet就会传给DN2,DN2传给DN3

  • DN1每传输一个Packet会放入一个应答队列等待应答

步骤8:完成上传

当第一个Block传输完成,客户端再次请求NameNode上传第二个Block,重复步骤3-7,直到完成所有Block,最后告知NameNode传输完成。

4.2 写流程关键点

关键点 说明
数据切分 文件按128MB切分成多个Block
Pipeline传输 DN1→DN2→DN3形成流水线
Packet校验 每个Packet 64KB,带校验
应答队列 每个Packet传输后等待应答
机架感知 NameNode返回DN时考虑机架位置

4.3 读流程 vs 写流程对比

对比项 读流程 写流程
客户端角色 拉取数据 推送数据
DN交互 单点读取 流水线传输
副本作用 就近读取 逐级复制
数据流向 DN→Client Client→DN1→DN2→DN3
校验方式 Packet校验 Packet校验

五、MapReduce

5.1 什么是MapReduce

MapReduce是Hadoop的分布式计算框架,它将复杂的计算任务拆分成两个阶段:

  • Map阶段:将任务分解成多个小任务,并行处理

  • Reduce阶段:将Map阶段的结果汇总,得到最终结果

核心思想 :分而治之------将大问题拆成小问题,分别解决后再合并。

5.2 MapReduce的优缺点

优点 缺点
适合大规模数据批处理 不适合实时计算
容错性强 不适合迭代计算
编程模型简单 磁盘IO开销大
自动并行化 延迟高

六、YARN

6.1 为什么需要YARN

在Hadoop 1.x中,MapReduce既是计算框架又是资源管理框架,存在两个问题:

  1. 资源管理不灵活:只能运行MapReduce任务

  2. 单点瓶颈:JobTracker负担过重

YARN(Yet Another Resource Negotiator) 的诞生解决了这些问题。它是一个资源调度平台 ,负责为运算程序提供服务器资源(CPU+内存),相当于一个分布式操作系统平台。

6.2 YARN的核心组件

YARN由以下组件构成:

组件 角色 职责
ResourceManager(RM) 全局资源管理器 处理客户端请求、监控NodeManager、启动/监控ApplicationMaster、资源分配和调度
NodeManager(NM) 单节点资源管理器 管理单个节点上的资源、处理来自RM的命令、处理来自AppMaster的命令
ApplicationMaster(AppMaster) 应用管理器 为应用程序申请资源并分配给内部任务、任务的监控和容错
Container(容器) 资源抽象 封装了某个节点上的多维度资源(内存、CPU、磁盘、网络等)

6.3 YARN的工作流程

步骤1:作业提交

Client向ResourceManager提交作业。

步骤2:RM分配Container

RM为作业分配一个Container,启动ApplicationMaster。

步骤3:AppMaster申请资源

AppMaster向RM申请运行任务所需的资源。

步骤4:RM分配资源

RM将资源分配给AppMaster,AppMaster与NodeManager通信,启动Task。

步骤5:Task执行

MapTask和ReduceTask在Container中执行。

步骤6:任务完成

所有Task完成后,AppMaster向RM注销,作业结束。

6.4 Container

Container是YARN中资源的抽象,它封装了某个节点上的多维度资源:

  • CPU:核心数

  • 内存:内存大小

  • 磁盘:磁盘空间

  • 网络:网络带宽

关键点 :Container是动态分配的,根据任务需求分配,任务完成后释放。

6.5 YARN的优势

优势 说明
资源利用率高 多种计算框架共享集群资源
可扩展性强 支持数千节点的大规模集群
容错性好 AppMaster和Task失败可自动重试
多框架支持 支持MapReduce、Spark、Flink等

七、HDFS、MapReduce、YARN的关系

三者协同工作,构成Hadoop的核心:

复制代码
┌─────────────────────────────────────────┐
│              YARN                       │
│          (资源调度平台)                  │
│  ┌─────────────┐  ┌─────────────┐       │
│  │  Container  │  │  Container  │       │
│  │  MapTask    │  │  ReduceTask │       │
│  └─────────────┘  └─────────────┘       │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│           MapReduce                     │
│          (分布式计算框架)                │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│              HDFS                       │
│         (分布式文件系统)                 │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  │
│  │DataNode1│  │DataNode2│  │DataNode3│  │
│  └─────────┘  └─────────┘  └─────────┘  │
└─────────────────────────────────────────┘

简单理解:

  • HDFS:负责存------数据存在哪里

  • MapReduce:负责算------数据怎么处理

  • YARN:负责管------资源怎么分配

八、总结

本篇博客系统讲解了Hadoop的三大核心组件:

组件 核心内容
HDFS架构 NameNode、DataNode、SecondaryNameNode、Client
HDFS读流程 客户端请求→NN返回元数据→DN传输数据→Packet校验
HDFS写流程 客户端请求→NN返回DN列表→Pipeline传输→逐级应答
MapReduce Map阶段+Reduce阶段,分而治之
YARN ResourceManager、NodeManager、ApplicationMaster、Container

核心要点:

  1. HDFS采用主从架构,NN管理元数据,DN存储实际数据。

  2. 副本机制(默认3副本)保证数据容错和负载均衡。

  3. 读写流程都基于Packet传输和校验,保证数据完整性。

  4. MapReduce将大任务拆成小任务并行处理。

  5. YARN实现了资源管理与计算框架的解耦。

相关推荐
亘元有量-流量变现1 小时前
手游自然流量增长逻辑:基于2026商店算法的全套ASO优化体系拆解
大数据·用户运营·aso优化·亘元有量·方糖试玩
PaperData1 小时前
2004-2025年中国农产品价格调查年鉴EXCEL+PDF
大数据·pdf
昨夜见军贴06161 小时前
监测文档校验体系搭建思路,IACheck AI 报告文档审核 Agent 助力竣工环保验收工作
大数据·人工智能
和裕1 小时前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
yydbjx1 小时前
苏州儿童早矫方案多维对比:MRC/隐形早矫/功能矫治/观察等待
大数据
DataX_ruby822 小时前
数据中台建设的人力成本测算:全周期岗位配置、三种建设模式对比与隐性成本
大数据·数据治理·数据中台
玩AI的奶茶2 小时前
什么情况适合租算力?一张场景对照表,加三个自测问题
大数据·linux·服务器·数据库·人工智能·python
Q26433650232 小时前
【有源码】基于大数据的超市商品分析与利润预测系统:XGBoost机器学习算法实战项目
大数据·机器学习·数据挖掘·数据分析·spark·毕业设计·课程设计
雪兽软件2 小时前
大数据炸科研:影响超预期!
大数据