开发者社区> 问答> 正文

HDFS如何读文件?

HDFS如何读文件?

展开
收起
芯在这 2021-12-05 19:40:37 291 0
1 条回答
写回答
取消 提交回答
  • (1)客户端通过调用FileSystem对象的open()来读取希望打开的文件。

    (2)DistributedFileSystem通过RPC来调用namenode,以确定文件的开头部分的块位置。对于每一块,namenode返回具有该块副本的datanode地址。DistributedFileSystem 返回一个FSDataInputStream对象给client读取数据,FSDataInputStream转而包装成一个DFSInputStream对象

    (3)client对这个输入流调用read()方法。存储着文件开头部分的块的数据节点的地址DFSInputStream随即与这些块最近的datanode相连接。

    (4)通过在数据流中反复调用read(),数据会从datanode返回client。

    (5)到达块的末端时,DFSInputStream会关闭与datanode间的联系,然后为下一个块找到最佳的datanode。client端只需要读取一个连续的流,这些对于client来说都是透明的。

    client在读取文件时,如果与datanode通信遇到错误,那么它就会去尝试对这个块来说下一个最近的块,并记住那个故障的datanode,以保证不会再对之后的块进行徒劳无益的尝试。

    client也会确认datanode发来的数据的校验和。如果发现一个损坏的块,client在会试图从别的datanode中读取一个块的副本之前,将这个错误报告给namenode。

    client检索数据时,总是被namenode指引到块中最好的datanode。(这里涉及到一个数据块选择算法)

    集群中,namenode仅提供数据块的位置请求(存储在内存中,十分高效),不是提供数据。否则如果客户端数量增长,namenode就会快速成为一个“瓶颈”。

    2021-12-05 22:25:57
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
海量数据分布式存储——Apache HDFS之最新进展 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载