1,读流程: 1)clinet通过FileSystem.open(path)方法,去和namenode进行RPC通信,NN就会检验元数据信息,权限等是否ok. 2)检验完成后,返回文件部分或者全部的block列表(其实就是返回FSDataInputStream对象) 3)client调用FSDataInputStream对象的read()的方法: a.去和第一个块最近的datanode进行read,读取完成后,会校验,假如正常,会关闭当前DataNode的通信。假如失败,会记录失败块的DN的信息,下次就不会去读取,那么会去这个块的第二个DN地址读取。 b.然后读取第二个块的最近的DataNode后,会关闭通信。 c.假如block列表读取完成了,文件还没结束,就继续读取下一批次的block的列表 4)client调用FSDatainputStream.close(),关闭输入流。