首页 百科知识 源代码分析(四一)

源代码分析(四一)

时间:2024-09-22 百科知识 版权反馈
【摘要】:前面分析的DFSClient内部类,占据了这个类的实现部分的2/3,我们来看剩下部分。DFSClient的成员变量不多,而且大部分是系统的缺省配置参数,其中比较重要的是到NameNode的RPC客户端: publicfinal ClientProtocol namenode; finalprivate ClientProtocol rpcNamenode;它们的差别是namenode在rpcNamenode的基础上,增加了失败重试功能。过程简单,方法主要是在处理OP_BLOCK_CHECKSUM需要交换的数据包。

前面分析的DFSClient内部类,占据了这个类的实现部分的2/3,我们来看剩下部分。

DFSClient的成员变量不多,而且大部分是系统的缺省配置参数,其中比较重要的是到NameNode的RPC客户端:

  publicfinal ClientProtocol namenode;

  finalprivate ClientProtocol rpcNamenode;

它们的差别是namenode在rpcNamenode的基础上,增加了失败重试功能。DFSClient中提供可各种构造它们的static函数,createClientDatanodeProtocolProxy用于生成到DataNode的RPC客户端。

DFSClient的构造函数也比价简单,就是初始化成员变量,close用于关闭DFSClient。

下面的功能,DFSClient只是简单地调用NameNode的对应方法(加一些简单的检查),就不罗嗦了:

setReplication/rename/delete/exists(通过getFileInfo的返回值是否为空判断)/listPaths/getFileInfo/setPermission/setOwner/getDiskStatus/totalRawCapacity/totalRawUsed/datanodeReport/setSafeMode/refreshNodes/metaSave/finalizeUpgrade/mkdirs/getContentSummary/setQuota/setTimes

DFSClient提供了各种create方法,它们最后都是构造一个OutputStream,并将文件名和生成的OutputStream加到leasechecker,完成创建动作。

append操作是通过namenode.append,获取最后的Block信息,然后构造一个OutputStream,并将文件名和生成的OutputStream加到leasechecker,完成append动作。

getFileChecksum用于获取文件的校验信息,它在得到数据块的位置信息后利用DataNode提供的OP_BLOCK_CHECKSUM操作,获取需要的数据,并综合起来。过程简单,方法主要是在处理OP_BLOCK_CHECKSUM需要交换的数据包。

DFSClient内部还有一些其它的辅助方法,都比较简单,就不再分析了。


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈