HDFS读写流程详解

HDFS(Hadoop Distributed File System)的读写流程设计旨在高效处理大规模数据,以下是其核心步骤:

HDFS 写流程

  1. 客户端发起请求
    客户端向NameNode请求上传文件,NameNode检查目标文件是否存在及权限,若通过则在元数据中创建文件记录。

  2. 数据分块与副本分配
    NameNode返回可用的DataNode列表(按机架感知策略选择),用于存储数据块及其副本(默认3个副本)。

  3. 建立数据传输管道(Pipeline)
    客户端将数据切分为块(默认128MB),按NameNode返回的DataNode列表建立传输管道。例如,假设DataNode顺序为DN1、DN2、DN3,客户端将数据发送给DN1,DN1依次传输给DN2,DN2再传给DN3,形成流水线。

  4. 数据写入与确认

    • 数据被分成多个数据包(Packet,通常64KB),客户端逐包发送至DN1。
    • 每个DataNode接收数据后缓存到本地,并异步转发到下一个节点。
    • 所有DataNode写入成功后,逐级返回确认(ACK)至客户端。
  5. 完成写入
    客户端通知NameNode写入完成,NameNode提交元数据变更。若写入中途某DataNode故障,NameNode会重新分配节点,客户端重传数据。

HDFS 读流程

  1. 客户端发起请求
    客户端向NameNode请求文件位置,NameNode返回文件块列表及每个块所在的DataNode地址(按网络拓扑排序,优先就近读取)。

  2. 并行读取数据块

    • 客户端直接连接最近的DataNode读取数据块。
    • 多个数据块可并行读取,提升吞吐量。
  3. 数据校验与容错

    • 客户端验证数据校验和。若校验失败,从其他副本重新读取。
    • 若某个DataNode不可用,客户端自动切换到其他副本节点。
  4. 组合数据块
    客户端将按顺序接收的数据块合并为完整文件。

关键设计特点

  • 避免NameNode瓶颈:数据读写不经过NameNode,仅由客户端与DataNode直接交互。
  • 流水线复制:写入时通过管道同步复制副本,减少网络开销。
  • 机架感知:副本分布在多个机架,兼顾读取效率与容灾。
  • 数据校验:通过校验和确保数据完整性。

示例场景

  • 写入文件:用户上传200MB文件,被分为两个块(128MB+72MB),每个块复制到3个DataNode,客户端通过管道高效传输。
  • 读取文件:用户下载时,从最近的DataNode并行读取两个块,合并后得到完整文件。

通过上述流程,HDFS实现了高吞吐量、高容错性的大数据存储能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值