hadoop是什么

有 Mysql 为什么还要有 Hadoop?

1- 🖼️ HDFS 架构详解(附逻辑图)

graph TD
  A[Client] -->|读写请求| B(NameNode)
  B -->|元数据查询| C[Metadata]
  B -->|指令下发| D(DataNode 1)
  B -->|指令下发| E(DataNode 2)
  B -->|指令下发| F(DataNode 3)
  D -->|数据块存储| G[Block A1]
  E -->|数据块存储| H[Block A2]
  F -->|数据块存储| I[Block A3]

核心组件

  1. NameNode

    • 唯一主节点(2.x 支持双节点热备),管理文件系统命名空间(文件目录树)
    • 记录文件分块信息(如 /data.txt 被拆分为 Block1/2/3)及块存储位置
    • 元数据常驻内存:快速响应查询,但需 FsImage+EditLog 持久化备份
  2. DataNode

    • 从节点,存储实际数据块(默认 128MB/块)
    • 定期向 NameNode 发送心跳(证明存活)和块报告(存储清单)
    • 数据冗余策略:每个块默认存 3 副本,跨机架放置(如 1 副本在同机架,另 2 副本在不同机架)

读写流程

  • 写文件:Client 切分文件 → NameNode 分配 DataNode → 管道式写入(DataNode 间接力复制)
  • 读文件:Client 向 NameNode 请求块位置 → 直连 DataNode 并行读取

1- ⚙️ MapReduce 计算模型(附流程图)

graph LR
  A[Input Data] --> B(Split)
  B --> C(Map Task)
  C -->|key-value pairs| D[Shuffle & Sort]
  D --> E(Reduce Task)
  E --> F[Output]

核心阶段

  1. Map 阶段

    • 并行处理输入分片(如 128MB 对应 1 个 Map 任务)
    • 执行用户自定义 map() 函数,输出中间键值对
    • 示例:WordCount 中 map(文本行) → 输出 <单词,1>
  2. Shuffle 阶段(关键优化区)

    • 将相同 key 的数据传输到同一个 Reduce 节点
    • 默认按 key 哈希分区,可自定义 Partitioner 控制数据分布
  3. Reduce 阶段

    • 对同一 key 的 values 集合执行 reduce() 函数
    • 示例:WordCount 中 reduce(<'apple',[1,1,1]>) → 输出 <'apple',3>

YARN 资源调度

  • ResourceManager:全局资源分配,接收任务请求
  • NodeManager:监控节点资源(CPU/内存),启动 Container 运行任务
  • ApplicationMaster:单个任务的协调者,申请资源并监控 Task

2- 🔍 关键特性与设计思想

  1. 容错机制

    • 数据层:块自动复制,DataNode 宕机后 NameNode 触发副本重建
    • 计算层:TaskTracker 失败时,ResourceManager 将任务重新调度到健康节点
  2. 移动计算而非数据

    • MapReduce 将计算代码发送到存储数据的 DataNode 执行,减少网络传输
  3. 横向扩展能力

    • 添加 DataNode 即可扩容存储,添加 NodeManager 即可提升计算力
特性 MySQL Hadoop
数据类型 结构化数据 结构化/非结构化
扩展方式 纵向扩展 横向扩展
延迟 毫秒级 分钟级
最佳场景 OLTP 交易处理 批处理分析

3- 💡 学习建议与延伸

  1. 动手实验:在伪分布式环境运行 WordCount 示例,观察 Web UI(端口 9870/8088)
  2. 扩展阅读
    • HDFS Federation 解决 NameNode 单点瓶颈
    • Spark 如何基于内存计算优化 MapReduce 迭代场景
  3. 官方资源Apache Hadoop文档

注:架构图根据 Hadoop 3.x 逻辑绘制,核心机制描述综合自多份技术文档。