读流程
客户端------>DistributedFileSystem.open()------>FSDataInputStrean------>ClientProtocol.getBlockLocation()远程调用------>名称节点----------(返回块的数据节点,并排序)-------->DFSInputStream------>客户端------------(利用DFSInputStream.read())------------>数据节点------>关闭流与数据节点的连接------>DFSInputStrean------>ClientProtocol.getBlockLocation()远程调用------>名称节点----------(返回块的数据节点,并排序)-------->DFSInputStream------>客户端------------(利用DFSInputStream.read())------------>数据节点------>关闭流与数据节点的连接------>……------>关闭流.close()
写流程
客户端------>DistributedFileSystem.create()------>FSDataOutputStream------>RPC远程调用------>名称节点------(检查,创建文件夹存储块信息)------>DFSOutputStream------>客户端------(利用DFSOutputStream.write())------>(数据分包,放入流内部队列,申请数据节点,生成管道,流经管道)数据节点------(ACK Packet)------>客户端------(利用DFSOutputStream.write())------>(数据分包,放入流内部队列,申请数据节点,生成管道,流经管道)数据节点------(ACK Packet)------>客户端------>……------>关闭流.close(),并且调用ClientProtocol.complete()通知名称节点关闭文件(一开始创建的文件)
两个文件系统
FileSystem 父类
DistributedFileSystem 子类
两个输入流
FSDataInputStream 父类
DFSInputStream 子类
两个输出流
FSDataOutputStream 父类
DFSOutputStream 子类