#FSDataInputStream封装了DFSInputStream
1.HDFS客户端请求打开文件创建输入流,请求发送给DFSInputStream。
2.FSDataInputStream向namnode获取数据块信息,通过clientProtocal.getBlock Locations()询问数据节点所需文件在哪里。把包含的文件的开头部分的一部分数据排序返回调给HDFS客户端。(根据客户端远近排序)
3.客户端拿到元数据后利用FSDataInputStream的Read()函数开始读数据。
4.FSDataInputStream会先读取距离客户顿最近的数据节点。当读完一个数据节点的时候FSDataInputStream会关闭于这个数据节点的数据流通道。
5.有可能这个文件没有读完,因为可能数据很大。所以FSDataInputStream要再次向namnode获取数据块信息,通过clientProtocal.getBlock Locations()函数。之后的跟2.3.4步的流程差不多。
6.所有数据都读完后,HDFS客户端关闭文件,结束数据流。所有流程结束。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)