Hadoop HDFS 读流程 写流程 详解

HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件,专为大规模数据集存储设计。其读写流程相对复杂,这里简单概述:

HDFS 写流程:

  1. 客户端发起请求

    • 客户端调用FileSystem.create()接口创建新文件或追加到现有文件。
  2. 连接NameNode

    • 客户端通过RPC与NameNode通信,提交写操作请求,包括文件名、副本数等信息。
  3. NameNode处理请求

    • NameNode检查文件是否已存在以及客户端是否有写权限。
    • 如果文件不存在,则NameNode分配新的Block ID,并选择合适的DataNode列表作为第一块的初始副本位置(一般会根据策略选择多个DataNode)。
  4. 客户端与DataNode交互

    • 客户端收到NameNode返回的信息后,直接与所选的第一个DataNode建立连接,并开始传输数据,这个DataNode被称为“管道首节点”(Pipeline’s first node, 或称为Primary DataNode)。
    • 数据在第一个DataNode上被接收并写入本地磁盘的同时,也会通过流水线复制方式传给后续的DataNode。
  5. 副本同步

    • 后续每个DataNode接收到数据后都会存储到本地,并将确认消息回传给前一个DataNode,直至整个数据块的所有副本都成功写入各DataNode。
  6. 完成确认与关闭

    • 当所有副本都写完并且确认无误后,最后一个DataNode会通知客户端写操作完成。
    • 客户端随后向NameNode发送一个完成信号,NameNode更新元数据信息,记录下文件的新状态和块的位置信息。

HDFS 读流程:

  1. 客户端请求读取

    • 客户端调用FileSystem.open()接口打开并读取文件。
  2. 联系NameNode

    • 客户端通过RPC询问NameNode获取文件的元数据信息,包括文件的各个块所在DataNode列表及其偏移量。
  3. NameNode响应元数据

    • NameNode根据文件名返回该文件所有块的元数据信息,包括块ID、DataNode地址列表等。
  4. 客户端与DataNode建立连接

    • 客户端根据NameNode提供的信息,按照块顺序依次与包含相应块的DataNode建立TCP连接。
  5. 读取数据

    • 客户端从离它最近或者网络状况最好的DataNode开始读取数据块,其他DataNode上的数据块作为备份源,用于数据完整性校验或故障转移时的数据读取。
  6. 合并数据

    • 客户端将从不同DataNode读取的数据进行拼接,最终获得完整的文件内容。
  7. 流式读取优化

    • 在实际应用中,HDFS通常支持高效的流式读取,即数据可以一边读取一边传递给下游的MapReduce任务或其他处理程序,无需等待全部数据加载完毕。
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值