diff --git a/hdfs/NamenodeProtocols详解.md b/hdfs/NamenodeProtocols详解.md new file mode 100644 index 0000000..00acc96 --- /dev/null +++ b/hdfs/NamenodeProtocols详解.md @@ -0,0 +1,56 @@ + +## NameNode客户端协议详解 + +协议的定义主要在类NamenodeProtocols中。如下: + +```java +public interface NamenodeProtocols + extends ClientProtocol, + DatanodeProtocol, + DatanodeLifelineProtocol, + NamenodeProtocol, + RefreshAuthorizationPolicyProtocol, + ReconfigurationProtocol, + RefreshUserMappingsProtocol, + RefreshCallQueueProtocol, + GenericRefreshProtocol, + GetUserMappingsProtocol, + HAServiceProtocol { +} +``` + +根据交互对象的不同,将协议进行了不同的归类。要想了解协议内容,需要将其单独分开分析。 + +### NamenodeProtocol 详解 + +```java +BlocksWithLocations getBlocks(DatanodeInfo datanode, long size, long + minBlockSize) throws IOException; +``` +当前协议主要是备NameNode和主NameNode之间的通信协议。 + +获取指定DataNode中的块信息。 +- size: 请求的块数量。 +- minBlockSize: 查询的block块需要小于当前值。 + +```java +public ExportedBlockKeys getBlockKeys() throws IOException; +``` +获取NameNode产生的所有的blockkey信息。blockKey是由BlockTokenSecretManager产生的,BlockTokenSecretManager有两种模式:master模式和worker模式。 +master主要产生token,并且将token导入给workers。master和worker都可以校验token。一般情况下,NN是master模式,DN是worker模式。主要用于加密。 + +```java +public long getTransactionID() throws IOException; +``` + +获取最新的事务ID。 + +### DatanodeProtocol + +DataNode和NameNode之间的协议。 + +### DatanodeLifelineProtocol + +DN和NN之间心跳协议。 + +