第3题:
大家提交在做HDFS实验过程中遇到的问题和解决方法。
(1)客户端通过FileSystem.open0打开文件,相应地,在HDFS文件系统中DistributedFileSystem具体实现了
FileSystem。因此,调用open()方法后,DistributedFileSystem会创建输人流FSDataInputStream,对于HDFS而言,具体的输人流就是DFSIputSream (2)在DFSInputStream的构造函数中,输人流通过CientPrtocal.getBlockLocations0远程调用名称节点,获得文件开始部分数据块的保存位置。对于该数据块,名称节点返回保存该数据块的所有数据节点的地址,同时根据距离客户端的远近对数据节点进行排序;然后,DistrbutedFileSyste会利用DFImpuStrem来实例化FSDataInputStream,返回给客户端,同时返回了数据块的数据节点地址。 (3)获得输人流FSDataInputStream后,客户端调用read()函数开始读取数据。输人流根据前面的排序结果,选择距离客户端最近的数据节点建立连接并读取数据。 ( 4)数据从该数据节点读到客户端;当该数据块读取完毕时, FSDatalnputstrtam关闭和该数据节点的连接。 (5 )输人流通过getBlockLocations()方法查找下一个数据块(如果客户端缓存中已经包含了该数据块的位置信息,就不需要调用该方法) (6)找到该数据块的最佳数据节点,读取数据 (7)当客户端读取完毕数据的时候,调用FSDatalnputStream的close()函数,关闭输人流需要注意的是,在读取数据的过程中,如果客户端与数据节点通信时出现错误,就会尝试连接包含此数据块的下一个数据节点。