`
flyingdutchman
  • 浏览: 353400 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hadoop深入学习:HDFS主要流程——读数据

阅读更多
       本节我们将着重学习客户端是如何读取HDFS上的数据的操作过程。
       查看HDFS上的文件内容的命令行操作:
             hadoop fs -cat example.txt
       

整个“读”流程如下图所示:

       1)、客户端通过FileSystem.open()打开文件,对应的HDFS具体的文件系统DistributedFileSystem创建一个输出流FSDataInputStream,返回给客户端;
       2)、到NameNode节点,获取要读文件的开始部分的数据块的保存位置,即上图中的第2步(NameNode节点中保存这这些数据块副本的DataNode节点的地址,这些数据节点根据他们与客户端的位置进行了简单的排序);
       3)、客户端端调用FSDataInputStream会和里客户端最近的DataNode节点建立连接,由FSDataInputStream.read()方法读取文件数据;当达到该块儿的末端时,FSDataInputStream会关闭和当前DataNode节点的连接,并通过上图中的第5步获得下一数据块的节点信息,寻找最佳的数据节点,建立连接并再次通过FSDataInputStream.read()方法读取数据;
       4)、当度全完所有的文件信息后,关闭当前的输入流,完成读操作。
       在客户端读取文件时,如果DataNode数据节点发生了错误,如节点停机或网络故障,那么客户端会尝试写一个数据块副本的位置,同时会也记住出现故障的DataNode节点,不会在进行没用的尝试;但是入如果是数据块损坏,南无他会将这个信息包装到DataNode向NameNode节点发出的“心跳”中,向NameNode节点告知这一信息,同时,尝试从别的DataNode节点中读取这一个数据块的内容。
  • 大小: 63 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics