Rpc协议就是Server实现一个声明了很多方法的接口并对外暴露此接口,Client通过调用此接口中声明的方法向server发送信息从而实现了与server的通信
HDFS 中的接口主要包括三种类型:
客户端相关接口:
ClientProtocol(client 与 namenode)
ClientDataNodeProtocol(client 与 datanode)
服务器端相关接口:
DataNodeProtocol(namenode 与 datanode)
IntelDataNodeProtocol(datanode 之间)
NameNodeProtocol(namenode 与 secondary namenode)
安全相关接口(具体不清楚)
客户端(DFSClient):
DFSClient 可以连接 hdfs 文件系统并执行一些基本的文件任务,使用 ClientProtocol 与 namenode 建立通信,另外它也可以通过 ClientDataNodeProtocol 连接 datanode 读取或更改上面的数据,在程序中不能直接使用 DFSClient 对象,我们使用 FileSystem 来使用 DFSClient 对象
NameNode 相当于 server,它实现了接口 ClientProtocol,而 DFSClient 相当于 client,它通过调用 ClientProtocol 来访问 NameNode
NameNode:
NameNode 是 DFS 中的目录空间管理者,整个 hdfs 系统中只有一个活跃的NameNode节点,NameNode 中存放了两张表
第一张表存放文件名与数据块的对应关系,就是 NameNode 节点中的 fsImage 文件
第二张表存放的是数据块与 datanode 的对应关系,此表是在程序运行时加载进内存中的
NameNode 实现了三个接口:
org.apache.hadoop.hdfs.protocol.ClientProtocol
org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol
org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol
NameNode 实现了 DataNodeProtocol,而 DataNode 通过调用此接口与 NameNode 建立并保持通信,将自己的块信息和负载信息上传给 NameNode
DataNodeProtocol 中声明了 registerDataNode 方法和 sendHeartBeat 方法
集群启动时 DataNode 会调用 registerDataNode 方法将自己的信息注册到 NameNode 上
DataNode 还会不断重复周期性的调用 sendHeartBeat 方法将自己的注册信息,磁盘信息,缓存等节点状态信息发送给 NameNode
NameNode 相当于 server 它实现了接口 DataNodeprotocol,而 DataNode 相当于 client,它通过调用 DataNodeProtocol 来访问 NameNode