Hadoop是大数据的基石
初学大数据组件,好奇底层如何实现,但是深入之前,需要先了解一些概念。
本篇文章就是做这个的。
⏳ Hadoop 组件演进时间线(2006~2023)
| 年份 | 里程碑事件 | 技术意义 |
|---|---|---|
| 2006 | Hadoop 诞生(雅虎开源) | 基于 Google 论文实现 HDFS+MapReduce |
| 2008 | HBase发布 | 解决 HDFS 无法随机读写的问题 |
| 2010 | Hive成为 Apache 顶级项目 | 用 SQL 降低大数据开发门槛 |
| 2012 | YARN取代第一代 MapReduce | 实现多计算引擎共存(资源池化革命) |
| 2013 | Spark 1.0发布 | 内存计算引擎引爆替代 MapReduce 浪潮 |
| 2014 | Flink进入 Apache 孵化器 | 真流处理引擎挑战 Spark |
| 2015 | Kafka崛起为流数据中枢 | 实时数据管道成为标配 |
| 2018 | 云厂商托管服务成熟(EMR/Dataproc) | 企业不再手工搭集群 |
| 2023 | 湖仓一体(Delta Lake/Iceberg) | 打破数据仓库与数据湖边界 |
一、Hadoop
核心三大组件
- 海量存储 HDFS
- 巨大规模计算 MapReduce
- 资源统一调度 Yarn
HDFS
物理磁盘上的真实样子:
/hdfs/data/current/
├── BP-1933264078-10.0.0.1-1439863458879 # 集群唯一ID
│ └── current/
│ ├── finalized/ # 已完成写入的块
│ │ ├── blk_1073741825 # 数据块(纯二进制)
│ │ ├── blk_1073741825.meta # 校验和文件(重要!)
│ │ ├── blk_1073741826
│ │ └── ...
│ └── rbw/ # 临时写入中的块
128M 大文件存储分块的原因是磁盘顺序读写效率是随机读写的百倍。
.meta文件:每 512 字节数据生成 4 字节 CRC 校验值存入
.meta。若校验失败,自动从其他副本读取并修复损坏块文件写入后只能追加,不能随机修改
1. HDFS 内部四大核心组件
| 组件 | 核心职责 | 关键特性 |
|---|---|---|
| NameNode (NN) | 1. 管理文件系统命名空间 2. 维护文件 - 块映射关系 3. 协调副本策略 | ・单点(存储元数据于内存) ・不存储实际数据 ・接收 DN 心跳 |
| DataNode (DN) | 1. 实际存储数据块 2. 执行数据读写操作 3. 定期向 NN 报告状态 | ・分布式(集群中可数百 / 千个) ・存储块文件 + 校验和 ・响应客户端请求 |
| Secondary NameNode (SNN) | 1. 定期合并元数据快照 2. 防止 EditLog 无限增长 | • 不是热备节点 ・辅助 NN 减轻重启压力 ・定期触发检查点 |
| Client (客户端) | 1. 与 NN 交互获取元数据 2. 直接与 DN 读写数据 | ・实现 HDFS 协议 ・拆分 / 组装文件块 ・处理容错重试 |
2. 组件协同工作原理(全流程解析)
▶️ 场景 1:文件写入流程
关键协作点:
- NN 只负责分配:告诉客户端数据存到哪些 DN
- DN 自组织传输:建立数据管道自动复制
- Client 只需连接第一个 DN:后续复制由 DN 自动完成
▶️ 场景 2:文件读取流程
设计优势:
- 客户端并行读取多个 DN → 最大化吞吐量
- NN不参与数据传输 → 避免成为瓶颈
▶️ 场景 3:容错自愈流程(DN 故障时)
自愈核心:
- NN 通过心跳检测故障(默认 5 分钟超时)
- 自动选择健康副本源重建数据
- 客户端无感知:读取时自动路由到健康 DN
3、核心协作机制详解
1. 元数据管理(NN + SNN 协作)
为何需要 SNN:
- EditLog 持续增长会拖慢 NN 重启速度
- SNN 每 1 小时(默认)合并生成新 FsImage
- 拯救场景:NN 重启时直接加载合并后 FsImage(快 10 倍)
fsImage是全局快照文件,EditLog是实时操作日志。类似于redis中的AOF日志。
为什么NN不自己另起线程自己合并fsImage?
是因为合并是个非常耗费cpu和内存的操作,NN作为核心角色,不能担此重任。
2. 数据管道(DN 协作核心)
当客户端写入数据时:
-
客户端只连接管道第一个 DN
-
DN 自动将数据分段传输(默认 64KB 分片)
-
每个 DN 同时做:
-
接收前节点数据
-
写入本地磁盘
-
转发给下节点
-
管道优势:
- 避免客户端带宽瓶颈
- 最大化利用集群内网带宽
3. 空间回收(协同回收站机制)
安全设计:
删除操作不是立即物理删除 → 防止误操作
未完,待续。。。