1.
推荐博客:
- 打开文件
- 读操作
打开文件
当客户端读取一个HDFS文件时,首先会调用DistributedFileSystem.open()方法打开这个文件,open方法首先会调用DFSCklient.open()方法创建HDFS文件对应的DFSInputStream输入流对象,然后构建一个HDFSDataInputSream对象包装DFSInputStream,最后将这个HDFSDataInputStream对象返回给客户端代码。
open()操作调用了两个RPC方法,分别是
- ClientProtocol.getBlockLocations()方法, 用于获取文件对应的所有数据块的位置信息;
- CientDatanodeProtocol.getReplicaVisibleLength()方法,用于获取Datanode上存储的某个数据块的真实长度。
client ----> DistributeFileSystem.open()
|
DFSClient.open()
/ RPC \
①向NN getBlockLocations() ②向DN获得真实长度
\/
得到DFSInputStream
两个RPC
- ClientProtocol.getBlockLocations()
获得指定路径的所有