从协议VersionedProtocol开始3——ClientProtocol、DatanodeProtocol、NamenodeProtocol、RefreshAuthorizationPolicyProtocol、RefreshUserMappingsProtocol
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的更多相关文章
- 从协议VersionedProtocol开始
VersionedProtocol协议是Hadoop的最顶层协议接口的抽象:5--3--3共11个协议,嘿嘿 1)HDFS相关 ClientDatanodeProtocol:client与datano ...
- 从协议VersionedProtocol开始4——AdminOperationsProtocol、InterTrackerProtocol、JobSubmissionProtocol、TaskUmbilicalProtocol
1.package org.apache.hadoop.mapred这四个协议都在这个包下. 2.从最简单的AdminOperationsProtocol看, void refreshQueues() ...
- 从协议VersionedProtocol开始2——ClientDatanodeProtocol和InterDatanodeProtocol
1.首先,我看的是hadoop1.2.1 这个里边,有点奇怪ClientDatanodeProtocol的versionID是4,但是InterDatanodeProtocol的versionID是3 ...
- 从协议VersionedProtocol开始1
Phase 0: Make a plan You must first decide what steps you're going to have in your process. It sound ...
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...
- rpc,客户端与NameNode通信的过程
远程过程:java进程.即一个java进程调用另外一个java进程中对象的方法. 调用方称作客户端(client),被调用方称作服务端(server).rpc的通信在java中表现为客户端去调用服务端 ...
- hadoop配置文件加载顺序(转)
原文 http://www.cnblogs.com/wolfblogs/p/4147485.html 用了一段时间的hadoop,现在回来看看源码发现别有一番味道,温故而知新,还真是这样的 在使用h ...
- HDFS源码分析之NameNode(1)————启动过程
源码:2.8.0 入口类:org.apache.hadoop.hdfs.server.namenode.NameNode main方法会调用createNameNode 创建 NameNode 实例, ...
- hadoop IPC 源代码分析
如图所示, 在hadoop中客户端需要和服务端通信 . 首先我们看一下需求是啥. 举一个例子,在客户端想要往hadoop集群中写数据的时候,它需要先和namenode通信,以便获得 诸一 ...
随机推荐
- Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)
转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...
- Linux runlevel 运行级别
runlevel可以认为是系统状态,形象一点,您可以认为runlevel有点象微软的windows操作系统中的Normal,safemode,和Command prompt only. Linux系统 ...
- 解决SQL命令行回退的问题
场景 在linux或者aix上安装后Oracle后,在SQL命令行下无法通过键盘的退格键回退,如下 解决方法 安装软件 # rpm -ivh rlwrap-0.41-1.el6.x86_64.rpm ...
- as的Enter_Frame与Timer
As3中的Timer和Event.EnterFrame是有明显的区别的. Evnet.EnterFrame是定时间隔多少时间出发.如果执行时间比间隔时间长,则会间隔执行时间这么久. 举个例子: Fla ...
- robotframework笔记15
资源和变量文件 用户关键字和变量 测试用例文件 和 测试套件 初始化文件只能用于文件在哪里 了,但 资源文件 提供一种机制来分享它们. 自 资源文件结构非常接近测试用例文件,它是 容易创建它们. 变量 ...
- hadoop分布式的环境搭建
版本: 使用hadoop1.1.2 JDK为java7 1.下载hadoop 2.配置hadoop文件 3测试 1.下载hadoop: 1.1 在https://archive.apache.o ...
- hdu----(5023)A Corrupt Mayor's Performance Art(线段树区间更新以及区间查询)
A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100 ...
- C++格式化输入输出
要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...
- 利用sklearn计算文本相似性
利用sklearn计算文本相似性,并将文本之间的相似度矩阵保存到文件当中.这里提取文本TF-IDF特征值进行文本的相似性计算. #!/usr/bin/python # -*- coding: utf- ...
- JSP 服务器响应
Response响应对象主要将JSP容器处理后的结果传回到客户端.可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie.HTTP文件头信息等. 一个典型的响应看起来就像下面 ...