From f3917672d1e01a6512305a34240db563b8e85b09 Mon Sep 17 00:00:00 2001 From: zeekling Date: Sat, 25 May 2024 15:11:39 +0000 Subject: [PATCH] =?UTF-8?q?NM=E5=8D=8F=E8=AE=AE=E8=AF=A6=E8=A7=A3=20(#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-on: https://git.zeekling.cn/big-data/hadoop_book/pulls/26 Co-authored-by: zeekling Co-committed-by: zeekling --- hdfs/NamenodeProtocols详解.md | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 hdfs/NamenodeProtocols详解.md 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之间心跳协议。 + +