HDFS(六)—— HDFS 文件下载的过程

本文详细介绍了HDFS文件下载的完整过程,从客户端发起请求,经过DFSClient创建DistributedFileSystem对象,通过RPC与NameNode交互获取文件元信息,再到内存和fsimage文件中查找,最终通过FSDataInputStream下载数据块。HDFS还会避免故障DataNode的访问。

HDFS文件下载过程

一、客户端发出下载文件的请求

客户端执行hdfs dfs -get /movie/a.avi命令请求 HDFS 下载文件到本地。

二、DFSClient 接收请求,创建 DistributedFileSystem 对象

DFSClient 接收下载文件的请求,并且创建 DistributedFileSystem 对象。

三、DistributedFileSystem 建立与 NameNode 的 RPC 通信,得到 NameNodeProxies

DistributedFileSystem 建立与 NameNode 的 RPC 通信,并且得到 NameNode 的代理对象 NameNodeProxies。

四、DistributedFileSystem 通过代理对象获取文件的元信息

DistributedFileSystem 通过代理对象去 HDFS 上查找文件的元信息。

五、在内存中查找文件的元信息

数据的元信息是优先存储在内存中的,所以 NameNode 会优先去内存中查找。

为了保证元信息的查找速率,通常我们会使用 NameNode 的联盟对内存容量进行扩展。

六、在 fsimage 文件中查找文件的元信息

如果在内存中找到了元信息,就直接返回,在内存中没有找到就会去 fsimage 文件中查找。

七、返回文件的元信息

NameNode 将找到的元信息返给 DFSClient。

八、创建输入流 FSDataInputStream

DFSClient 创建 FSDataInputStream 对象建立与 HDFS 的 IO 流。

// 打开一个输入流 <------HDFS
InputStream in = client.open(new Path("/tools/stt.txt"));

九、下载数据块

通过 IO 流循环去 DataNode 下载数据。

HDFS 会维护一个 DataNode 的失败列表,记录哪些 DataNode 坏掉了,客户端在访问数据的时候就不会去这些 DataNode 上访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值