在CGFT大数据技术中,读数据的过程是很重要的。具体有什么,随融跃小编往下看!
客户端连续调用open()、read()、close()读取数据时,HDFS内部的执行过程:
1. 客户端通过filesystem.open()打开文件,相应的,在HDFS文件系统中,disterbutedfilesysrem具体体现了filesystem,因此,调用open()后,disterbutedfilesysrem会创建输入流filesystem,而对于HDFS而言,具体的输入流就是dfsinputstream。
2. 在dfsinputstream的构造函数中,输入流通过clientProtocal.getblocklocations()远程调用名称节点,获得文件开始部分数据块的保存位置。对于该数据块,名称节点返回保存该数据块的所有数据节点的地址,同时,根据距离客户端的远近对数据节点进行排序。然后,disterbutedfilesysrem会利用dfsinputstream来实例化fsdatainputstream,返回给客户端,同时返回了数据块的数据节点地址。
3. 获得输入流fsdatainputstream后,客户端调用read()函数开始读取数据。输入流根据前面的排序结果,选择距离客户端zui近的数据节点建立连接并读取数据。
4. 数据从该数据节点读到客户端,当该数据块读取完毕时,fsdatainputstream关闭和该数据节点的连接。
5. 输入流通过getblocklocations()方法查找下一个数据块。
6. 找到该数据块的zui佳数据节点,读取数据。
7. 当客户端读取完毕数据的时候,调用fsdatainputstream的close()函数,关闭输入流。
需要注意的是,在读取数据的过程中,如果客户端与数据节点通信时出现错误,就会尝试连接包含此数据块的下一个数据节点。
