A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

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

客户端执行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"));
1
2
九、下载数据块

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

HDFS 会维护一个 DataNode 的失败列表,记录哪些 DataNode 坏掉了,客户端在访问数据的时候就不会去这些 DataNode 上访问。
---------------------
【转载,仅作分享,侵删】
作者:曲健磊
原文:https://blog.csdn.net/a909301740/article/details/84454520


4 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2018-12-4 10:39:27
沙发
到此一观
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马