HDFS存储原理与MapReduce计算模型

发布于:2025-05-25 ⋅ 阅读:(24) ⋅ 点赞:(0)

HDFS存储原理

1. 架构设计
  • 主从架构:包含一个NameNode(主节点)和多个DataNode(从节点)。
    • NameNode:管理元数据(文件目录结构、文件块映射、块位置信息),不存储实际数据。
    • DataNode:存储实际数据块,负责处理客户端的读写请求,并定期向NameNode发送心跳和块报告。
2. 数据分块与副本机制
  • 分块存储:文件被分割为固定大小的块(默认128MB或256MB),便于并行处理和存储优化。
  • 多副本冗余:每个块默认保存3个副本,分布策略为:
    • 第1个副本:写入客户端所在节点(若为集群外则随机选节点)。
    • 第2个副本:同一机架的另一节点。
    • 第3个副本:不同机架的节点。
  • 容错性:通过副本机制和机架感知策略,保障数据可靠性与读取效率。
3. 读写流程
  • 写入流程

    1. 客户端向NameNode申请写入,NameNode分配DataNode列表。
    2. 客户端将数据块写入第一个DataNode,后者通过管道依次复制到其他副本节点。
    3. 写入成功后,NameNode更新元数据。
  • 读取流程

    1. 客户端向NameNode获取文件块的位置信息。
    2. 直接从最近的DataNode(基于网络拓扑)读取数据块,支持并发读取多个块。
4. 容错与高可用
  • DataNode故障:NameNode通过心跳检测移除失效节点,并触发副本复制。
  • NameNode HA(Hadoop 2.x+):通过主备NameNode和JournalNode实现故障自动切换,解决单点问题。

MapReduce计算模型

1. 核心阶段
  • Map阶段

    • 输入数据被划分为分片(Split),每个分片由一个Map任务处理。
    • Map任务输出中间键值对(Key-Value),可本地聚合(Combiner)减少数据传输。
  • Shuffle与Sort阶段

    • 分区(Partitioning):按Key的哈希值分配到不同Reduce任务。
    • 排序与合并:Map端对输出排序,Reduce端合并相同Key的数据。
  • Reduce阶段

    • 对Shuffle后的数据执行用户定义的Reduce逻辑,生成最终结果。
2. 执行流程
  1. 作业提交:客户端提交任务到ResourceManager(YARN架构)。
  2. 任务调度:ApplicationMaster分配Map/Reduce任务到NodeManager。
  3. 数据本地化优化:优先调度Map任务到存储数据的节点,减少网络IO。
  4. 结果输出:Reduce结果写入HDFS或其他存储系统。
3. 容错机制
  • 任务重试:失败的Map/Reduce任务会被重新调度到其他节点。
  • 推测执行:对慢节点启动备份任务,防止个别任务拖慢整体进度。
4. 适用场景
  • 离线批处理:适合大规模数据并行计算(如日志分析、ETL)。
  • 局限性:不适合低延迟(实时)场景,迭代计算效率较低(需多次读写HDFS)。

总结

  • HDFS:通过分块、多副本和机架感知实现高吞吐、高可靠存储。
  • MapReduce:以分而治之思想,通过Map、Shuffle/Sort、Reduce三阶段处理海量数据,结合容错机制保障稳定性。两者共同构成Hadoop生态的核心计算与存储基础。

网站公告

今日签到

点亮在社区的每一天
去签到