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

本文详细介绍了HDFS客户端读取文件的过程,包括通过FileSystem.open()打开文件、获取数据块位置、读取数据块等内容。此外还介绍了客户端如何处理DataNode故障及数据块损坏的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节我们将着重学习客户端是如何读取HDFS上的数据的操作过程。
查看HDFS上的文件内容的命令行操作:

hadoop fs -cat example.txt

整个“读”流程如下图所示:
[img]http://dl2.iteye.com/upload/attachment/0084/9607/f565dada-3d0c-3852-a2a6-1b376a34b338.jpg[/img]
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节点中读取这一个数据块的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值