HDFS(4)|青训营笔记

76 阅读2分钟

HDFS中基于远程过程调用的接口

接口是软件系统不同组成部分衔接的约定,一个良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。对于HDFS这样的复杂系统,接口也是观察系统工作的一个出发点。

HDFS的体系结构包括了名字节点、数据节点和客户端3个主要角色,它们间有两种主要的通信接口:

  • Hadoop远程过程调用接口
  • 基于TCP或HTTP的流式接口

与客户端相关的接口

Hadoop远程方法调用使得HDFS的两个进程实体间能够使用传统Java过程调用中的控制流模型来进行交互,这个交互的过程可以使用Java基本类型的数据,也可以使用对象作为调用参数或返回值,如果处理过程中出现异常,服务器也可以抛出异常,IPC的调用者会收到对应的异常。客户端相关接口上的类不但为ClientProtocol和ClientDatanodeProtocol服务,同时也应用于服务器间接口的交互,包含很多HDFS中基本概念的抽象。类图中的类可以分为3种:和数据块相关、和数据节点相关、和HDFS文件元数据相关。

与数据块相关的类如org.apache.hadoop.hdfs.protocol.Block。Block是大量和数据块相关的类的基础,在客户端接口上,这样的类有LocatedBlock、LocatedBlocks和BlockLocalPathInfo。

另一组类和数据节点相关,它们是DatanodeID和DatanodeInfo。DatanodeInfo继承自DatanodeID,在DatanodeID的基础上,提供了数据节点上的一些度量信息。

出现在ClientProtocol接口上的最后一组类是HdsfFileStatus和DirectoryListing。HdfsFileStatus保存了HDFS文件/目录的属性,DirectoryListing用于一次返回一个目录下的多个多个文件/子目录的属性,它们都用于实现FileSystem.getFileStatus()方法族。