1、ClientProtocol这个玩意的版本号是61L;DatanodeProtocol 是26L;NamenodeProtocol是 3L;RefreshAuthorizationPolicyProtocol是1L,RefreshUserMappingsProtocol是1L,

好了,列举这玩意有什么用,大家也看到了,其实,最经常变化的是ClientProtocol,然后是DatanodeProtocol,后边那两个基本没动过,嘿嘿

人家写代码也不是随便来的,有顺序的

public class NameNode implements ClientProtocol, DatanodeProtocol,
                                 NamenodeProtocol, FSConstants,
                                 RefreshAuthorizationPolicyProtocol,
                                 RefreshUserMappingsProtocol

2、先看看ClientProtocol,这个里边方法多,常量也不少,枚举下常量

public int GET_STATS_CAPACITY_IDX = 0;
public int GET_STATS_USED_IDX = 1;
public int GET_STATS_REMAINING_IDX = 2;
public int GET_STATS_UNDER_REPLICATED_IDX = 3;
public int GET_STATS_CORRUPT_BLOCKS_IDX = 4;
public int GET_STATS_MISSING_BLOCKS_IDX = 5;

这六个数字是干什么事情的呢?

不要急,慢慢看,

这个protocol共有三部分的方法(14+6+19=39方法):

分别是

File contents、Namespace management、System issues and management

第一大部分是File contents,共14个方法,里边create和addBlock都有重载的方法。

getBlockLocations、create(2)、append、recoverLease、isFileClosed、setReplication、setPermission、setOwner、abandonBlock、addBlock(2)、complete、reportBadBlocks。

按照增删改查来划分,

增:create(2)、addBlock(2)、

删:abandonBlock

改:append、setReplication、setPermission、setOwner、recoverLease

查:getBlockLocations、isFileClosed、complete、reportBadBlocks

第二大部分是Namespace management,也就6个方法。

rename、concat、delete(2)、mkdirs、getListing、

这个也好理解:重命名,合并文件,删除文件,删除目录,创建目录、查看目录,还是玩的增删改查,不过是文件系统的。

第三大部分是System issues and management

renewLease、getStats、getDatanodeReport、getPreferredBlockSize、setSafeMode、saveNamespace、refreshNodes、finalizeUpgrade、distributedUpgradeProgress、metaSave、setBalancerBandwidth、getFileInfo、getContentSummary、setQuota、fsync、setTimes、getDelegationToken、renewDelegationToken、cancelDelegationToken。

先说renewLease这个玩意就是个心跳,客户端的心跳,如果隔一定时间不发送这个,服务端就认为你死了,回收权利,重新分配;

getStats这个方法返回一个数组,这个数据的下表就是定义的那几个常量。比如GET_STATS_CAPACITY_IDX = 0;这个返回值是个Long[]的数组,[0] contains the total storage capacity of the system, in bytes.

getDatanodeReport:这个方法返回当前所有的DataNode节点的信息,每个节点封装成一个DataNodeInfo返回。

getPreferredBlockSize:返回指定文件的Block大小,long

setSafeMode:这个是设置安全模式的

saveNamespace:保存NameNode的命名空间的镜像。不过这个需要超级权限和安全模式

refreshNodes:重新加载datanode

finalizeUpgrade:完成之前的升级

distributedUpgradeProgress:各个Datanode的升级

metaSave:保存NameNode上的信息到某一个文件

setBalancerBandwidth:设置均衡带宽

getFileInfo:获得文件信息

getContentSummary:获得某一个路径的详细信息

setQuota:设置一个目录的配额,可以设置文件数量,可以设置文件大小

fsync:把文件刷到硬盘上

setTimes:这个是设置文件的时间属性

getDelegationToken、renewDelegationToken、cancelDelegationToken:设置、刷新、取消Token的相关操作。

总结下,这19个方法里边,token相关操作的3个(getDelegationToken、renewDelegationToken、cancelDelegationToken),文件相关5个(getFileInfo、getContentSummary、setQuota、fsync、setTimes),安全模式和升级相关的7个(setSafeMode、saveNamespace、refreshNodes、finalizeUpgrade、distributedUpgradeProgress、metaSave、setBalancerBandwidth),获取信息的4个(renewLease、getStats、getDatanodeReport、getPreferredBlockSize),共计19个。

3、再来看看DataNodeProtocol

final static int DNA_UNKNOWN = 0;    // unknown action  
final static int DNA_TRANSFER = 1;   // transfer blocks to another datanode
final static int DNA_INVALIDATE = 2; // invalidate blocks
final static int DNA_SHUTDOWN = 3;   // shutdown node
final static int DNA_REGISTER = 4;   // re-register
final static int DNA_FINALIZE = 5;   // finalize previous upgrade
final static int DNA_RECOVERBLOCK = 6;  // request a block recovery
final static int DNA_ACCESSKEYUPDATE = 7;  // update access key
final static int DNA_BALANCERBANDWIDTHUPDATE = 8; // update balancer bandwidth

public DatanodeRegistration register(DatanodeRegistration registration
                                       ) throws IOException;

public DatanodeCommand[] sendHeartbeat(DatanodeRegistration registration,
                                     long capacity,
                                     long dfsUsed, long remaining,
                                     int xmitsInProgress,
                                     int xceiverCount) throws IOException;

public DatanodeCommand blockReport(DatanodeRegistration registration,
                                   long[] blocks) throws IOException;

public void blocksBeingWrittenReport(DatanodeRegistration registration,
    long[] blocks) throws IOException;

public void blockReceived(DatanodeRegistration registration,
                          Block blocks[],
                          String[] delHints) throws IOException;

public void errorReport(DatanodeRegistration registration,
                        int errorCode,
                        String msg) throws IOException;
 
public NamespaceInfo versionRequest() throws IOException;

UpgradeCommand processUpgradeCommand(UpgradeCommand comm) throws IOException;

public void reportBadBlocks(LocatedBlock[] blocks) throws IOException;

public long nextGenerationStamp(Block block, boolean fromNN) throws IOException;

public void commitBlockSynchronization(Block block,
    long newgenerationstamp, long newlength,
    boolean closeFile, boolean deleteblock, DatanodeID[] newtargets
    ) throws IOException;

这个协议不是很大,

4、NamenodeProtocol这个是个更简单的协议

public BlocksWithLocations getBlocks(DatanodeInfo datanode, long size) throws IOException;

public ExportedBlockKeys getBlockKeys() throws IOException;

public long getEditLogSize() throws IOException;

public CheckpointSignature rollEditLog() throws IOException;

public void rollFsImage() throws IOException;

共有4个方法,用来和Secondary通讯的,

5、RefreshAuthorizationPolicyProtocol

Protocol which is used to refresh the authorization policy in use currently.协议用于刷新目前使用的授权策略

只有一个无参无返回值的方法

void refreshServiceAcl() throws IOException;

6、RefreshUserMappingsProtocol

/**
* Refresh user to group mappings.
* @throws IOException
*/
public void refreshUserToGroupsMappings() throws IOException;

/**
* Refresh superuser proxy group list
* @throws IOException
*/
public void refreshSuperUserGroupsConfiguration()
throws IOException;

这个也是两个无参无返回的方法。

从协议VersionedProtocol开始3——ClientProtocol、DatanodeProtocol、NamenodeProtocol、RefreshAuthorizationPolicyProtocol、RefreshUserMappingsProtocol的更多相关文章

  1. 从协议VersionedProtocol开始

    VersionedProtocol协议是Hadoop的最顶层协议接口的抽象:5--3--3共11个协议,嘿嘿 1)HDFS相关 ClientDatanodeProtocol:client与datano ...

  2. 从协议VersionedProtocol开始4——AdminOperationsProtocol、InterTrackerProtocol、JobSubmissionProtocol、TaskUmbilicalProtocol

    1.package org.apache.hadoop.mapred这四个协议都在这个包下. 2.从最简单的AdminOperationsProtocol看, void refreshQueues() ...

  3. 从协议VersionedProtocol开始2——ClientDatanodeProtocol和InterDatanodeProtocol

    1.首先,我看的是hadoop1.2.1 这个里边,有点奇怪ClientDatanodeProtocol的versionID是4,但是InterDatanodeProtocol的versionID是3 ...

  4. 从协议VersionedProtocol开始1

    Phase 0: Make a plan You must first decide what steps you're going to have in your process. It sound ...

  5. Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构

    Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...

  6. rpc,客户端与NameNode通信的过程

    远程过程:java进程.即一个java进程调用另外一个java进程中对象的方法. 调用方称作客户端(client),被调用方称作服务端(server).rpc的通信在java中表现为客户端去调用服务端 ...

  7. hadoop配置文件加载顺序(转)

    原文  http://www.cnblogs.com/wolfblogs/p/4147485.html 用了一段时间的hadoop,现在回来看看源码发现别有一番味道,温故而知新,还真是这样的 在使用h ...

  8. HDFS源码分析之NameNode(1)————启动过程

    源码:2.8.0 入口类:org.apache.hadoop.hdfs.server.namenode.NameNode main方法会调用createNameNode 创建 NameNode 实例, ...

  9. hadoop IPC 源代码分析

           如图所示, 在hadoop中客户端需要和服务端通信 . 首先我们看一下需求是啥. 举一个例子,在客户端想要往hadoop集群中写数据的时候,它需要先和namenode通信,以便获得 诸一 ...

随机推荐

  1. Nginx安装(zhuan)

    http://www.nginx.cn/install ************************ nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. ...

  2. python语法笔记(二)

    1. 循环对象 循环对象是一类特殊的对象,它包含一个next()方法(在python3中是 __next__()方法),该方法的目的是进行到下一个结果,而在结束一系列结果之后,举出 StopItera ...

  3. MyEclipse/Eclipse中XML文件的格式化配置

    Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...

  4. mongodb配置及简单示例

    安装 在官网下载安装 https://www.mongodb.com/ 配置 我的电脑—>右键属性—>左边列表中的高级程序设置—>环境变量 点击path 把你的mongodb文件路径 ...

  5. jq实现楼层切换效果

    <!DOCTYPE html> <html> <head> <style> * { margin: 0; padding: 0; box-sizing: ...

  6. 通配符+countif()解决大于15位数的计数问题

    excel的最大精度是15位,如果一个单元格中存储的数字超过15位,那么函数在计算的时候将会出现问题,它们会将15位之后的数字变成0. 在这种情况下,需要在函数中加入通配符,例如,统计A列中,A1出现 ...

  7. Disney English

    项目大体流程是做几个页面的模板,然后后台用html改成phtml 但是后期连模板都要改掉,很多都无法考虑到复用 css很混乱,js已经忘记了

  8. python 基础学习(元组,if,for)

    1.tuple对象 tuple 元组 有序的列表 tuple一旦创建不能修改 a.定义元组t=('a','b','c')空元素的tuple t=()()既表示tuple 也表示运算符的优先级 所以定义 ...

  9. Sql Server聚集索引创建

    create CLUSTERED index IX_ZhuiZIDList_ZID on ZhuiZIDList (ZID)

  10. Shell基础:Linux权限管理

    Linux权限基本概念 查看系统(文件夹/文件)权限: ls -l =>d/-   xxx xxx xxx.  num  owner  group  size   date  filename ...