指定hdfs中namenode的地址_HDFS 数据读取流程

本文将介绍 HDFS 端到端的数据读操作。因为数据是以分布式方式存储的,那么数据读操作将是并行执行的。并且让你理解 HDFS 读数据流程,以及客户端是如何跟 Slave 节点交互的,以及如何从 Salve 节点读取数据的。

HDFS 数据读操作

7d78f92c528445ca98e767fce7e96f4b.gif

HDFS 数据读取流程

下面将详细介绍 HDFS 并行读数据流程,以及客户端是怎么与 Namenode 和 Datanode 交互的,如何对客户端进行身份验证,以及它是怎么读取数据的,在读数据过程中如何容错。

客户端与 Namenode 的交互

Namenode 存储着 HDFS 集群的元数据信息,比如,哪个数据块存储在哪个 Salve 节点,哪些块存储在哪个文件等。因此为了获取存储数据块的 Slave 节点的地址,客户端必须和 Namenode 交互。Namenode 将会提供存储特定数据块的 Slave 详细信息。

让我们更深入的理解客户端与 Namenode 的交互过程。为了读取存储在 HDFS 上的数据块,客户端调用 FileSystem 对象的 open() 方法发起请求。然后 FileSystem 将通过 RPC 调用 Namenode,以获取 Slave 节点位置信息,这些 Slave 节点存储着客户端所请求文件的数据块。

在这个过程中,Namenode会检查客户端是否有访问文件的权限,如果有权限,那么它会给客户端发送块位置信息。同时,它给客户端提供一个安全token,以便 Slave 节点对客户端做身份认证。

客户端与 Datanode 的交互

客户端在接收到 Slave 节点的地址信息之后,将直接到 Slave 节点读取数据块。数据直接从 Slave 节点流向客户端,且不经过 Namenode 。客户端并行从多个 Slave 节点读取数据块。

让我们更深入理解客户端和 Datanode 之间的交互过程。客户端使用 FSDataInputStream 对象给 Slave 节点发送读请求。客户端和 Datanode 之间的交互由客户端API DFSInputStream 对象来管理。客户端会把 Namenode 提供的身份认证 token 出示给 Slave节点,身份认证没问题之后,客户端调用 InputStream 开始读数据,并且数据持续从 Datanode 传输到 客户端,当读完整个块之后,调用 close() 函数,DFSInputStream 将关闭与 datanode 的连接。

HDFS 的读操作是经过高度优化的,实际读取过程中并不涉及 Namenode,否则的话,Namenode 将成为数据并行读取的瓶颈。由于分布式并行读取的机制,上千个客户端可以非常高效的直接从很多 Datanode 节点读取数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值