大数据Hadoop及其衍生物的基本概念(1. HDFS)

72 阅读4分钟

Hadoop是大数据的基石

初学大数据组件,好奇底层如何实现,但是深入之前,需要先了解一些概念。

本篇文章就是做这个的。

⏳ Hadoop 组件演进时间线(2006~2023)

年份里程碑事件技术意义
2006Hadoop 诞生(雅虎开源)基于 Google 论文实现 HDFS+MapReduce
2008HBase发布解决 HDFS 无法随机读写的问题
2010Hive成为 Apache 顶级项目用 SQL 降低大数据开发门槛
2012YARN取代第一代 MapReduce实现多计算引擎共存(资源池化革命)
2013Spark 1.0发布内存计算引擎引爆替代 MapReduce 浪潮
2014Flink进入 Apache 孵化器真流处理引擎挑战 Spark
2015Kafka崛起为流数据中枢实时数据管道成为标配
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:文件写入流程

image.png

关键协作点

  1. NN 只负责分配:告诉客户端数据存到哪些 DN
  2. DN 自组织传输:建立数据管道自动复制
  3. Client 只需连接第一个 DN:后续复制由 DN 自动完成

▶️ 场景 2:文件读取流程

image.png

设计优势

  • 客户端并行读取多个 DN → 最大化吞吐量
  • NN不参与数据传输 → 避免成为瓶颈

▶️ 场景 3:容错自愈流程(DN 故障时)

image.png

自愈核心

  • NN 通过心跳检测故障(默认 5 分钟超时)
  • 自动选择健康副本源重建数据
  • 客户端无感知:读取时自动路由到健康 DN

3、核心协作机制详解

1. 元数据管理(NN + SNN 协作)

image.png

为何需要 SNN

  • EditLog 持续增长会拖慢 NN 重启速度
  • SNN 每 1 小时(默认)合并生成新 FsImage
  • 拯救场景:NN 重启时直接加载合并后 FsImage(快 10 倍)

fsImage是全局快照文件,EditLog是实时操作日志。类似于redis中的AOF日志。

为什么NN不自己另起线程自己合并fsImage?

是因为合并是个非常耗费cpu和内存的操作,NN作为核心角色,不能担此重任。

2. 数据管道(DN 协作核心)

当客户端写入数据时:

  1. 客户端只连接管道第一个 DN

  2. DN 自动将数据分段传输(默认 64KB 分片)

  3. 每个 DN 同时做:

    • 接收前节点数据

    • 写入本地磁盘

    • 转发给下节点

管道优势

  • 避免客户端带宽瓶颈
  • 最大化利用集群内网带宽

3. 空间回收(协同回收站机制)

image.png

安全设计
删除操作不是立即物理删除 → 防止误操作

未完,待续。。。