1)流程图
2)流程解读
1. 客户端执行命令(或者代码读取),调用的是dfs的FileSystem.open的方法,open传的是文件路径
2. 根据文件路径去NN找,NN把block块和所在位置的信息的映射关系,返回给一个FSDataInoputStream的对象
3. 客户端拿到FSDataInoputStream对象(即block块地址列表),根据最近的网段去循环读取block块
4. 读取完后会有一个check的动作,check完之后会关闭与DN的连接
5. 以130M文件为例,会有2个block,6个副本,分布在不同机器上。
6. 当拿第一个block的机器是有问题的,会去拿第二个副本的机器上拿,依次类推
7. 假如全部副本都损坏,即文件损坏,不能读取了
8. 当所有block都读取完后,会拼装成一个完整的数据流,再转换成文件的内容
9.最后close,关闭输入流
3)客户端操作
对于客户端,操作是透明的,用户体现就是连续的数据流