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

1、首先,我看的是hadoop1.2.1

这个里边,有点奇怪ClientDatanodeProtocol的versionID是4,但是InterDatanodeProtocol的versionID是3,

而且这两个还不再同一个包下,InterDatanodeProtocol位于org.apache.hadoop.hdfs.server.protocol下,而ClientDatanodeProtocol位于org.apache.hadoop.hdfs.protocol下

2、ClientDatanodeProtocol里边的三个方法

LocatedBlock recoverBlock(Block block, boolean keepLength,
      DatanodeInfo[] targets) throws IOException;

Block getBlockInfo(Block block) throws IOException;

BlockLocalPathInfo getBlockLocalPathInfo(Block block,
     Token<BlockTokenIdentifier> token) throws IOException;

recoverBlock,getBlockInfo,getBlockLocalPathInfo

3、InterDatanodeProtocol里边的三个方法

BlockMetaDataInfo getBlockMetaDataInfo(Block block) throws IOException;

BlockRecoveryInfo startBlockRecovery(Block block) throws IOException;

void updateBlock(Block oldblock, Block newblock, boolean finalize) throws IOException;

getBlockMetaDataInfo,startBlockRecovery,updataBlock

4、很明显,两个协议都可以恢复Block,都可以获取Block的一些信息

不同的是ClientDatanodeProtocol获取的信息是为了下载,而InterDatanodeProtocol里边获取的信息是为了同步,也就是updataBlock

5、BlockMetaDataInfo继承至Block,

只多加了一个属性 private long lastScanTime;

6、BlockRecoveryInfo这个类也很简单

private Block block;
private boolean wasRecoveredOnStartup;

7、看来看去,都绕不开一个类,哪个类呢?Block

这个类也就是

private long blockId;
private long numBytes;
private long generationStamp;

三个核心属性,ID,大小,生成的时间戳

这里边有两个方法很有意思

/**
* 判断是否是一个block的名字
*/
public static boolean isBlockFilename(File f) {
  String name = f.getName();
  if ( name.startsWith( "blk_" ) &&
      name.indexOf( ‘.‘ ) < 0 ) {
    return true;
  } else {
    return false;
  }
}

static long filename2id(String name) {
  return Long.parseLong(name.substring("blk_".length()));
}

这你也就明白了,后台生成的文件为什么是blk_开头的了

时间: 2024-11-08 16:17:39

从协议VersionedProtocol开始2——ClientDatanodeProtocol和InterDatanodeProtocol的相关文章

从协议VersionedProtocol开始

VersionedProtocol协议是Hadoop的最顶层协议接口的抽象:5--3--3共11个协议,嘿嘿 1)HDFS相关 ClientDatanodeProtocol:client与datanode交互的接口,操作不多,只有一个block恢复的方法.那么,其它数据请求的方法呢?client与datanode主要交互是通过流式的socket实现,源码在DataXceiver,在这里先不说了: ClientProtocol:client与Namenode交互的接口,所有控制流的请求均在这里,如

从协议VersionedProtocol开始4&mdash;&mdash;AdminOperationsProtocol、InterTrackerProtocol、JobSubmissionProtocol、TaskUmbilicalProtocol

1.package org.apache.hadoop.mapred这四个协议都在这个包下. 2.从最简单的AdminOperationsProtocol看, void refreshQueues() throws IOException; void refreshNodes() throws IOException; boolean setSafeMode(JobTracker.SafeModeAction safeModeAction)  throws IOException; 3.相对于h

从协议VersionedProtocol开始1

Phase 0: Make a plan You must first decide what steps you're going to have in your process. It sounds simple (in fact, all of this sounds simple), and yet people often don't make this decision before they start coding. If your plan is "let's jump in

从协议VersionedProtocol开始3&mdash;&mdash;ClientProtocol、DatanodeProtocol、NamenodeProtocol、RefreshAuthorizationPolicyProtocol、RefreshUserMappingsProtocol

1.ClientProtocol这个玩意的版本号是61L:DatanodeProtocol 是26L:NamenodeProtocol是 3L;RefreshAuthorizationPolicyProtocol是1L,RefreshUserMappingsProtocol是1L, 好了,列举这玩意有什么用,大家也看到了,其实,最经常变化的是ClientProtocol,然后是DatanodeProtocol,后边那两个基本没动过,嘿嘿 人家写代码也不是随便来的,有顺序的 public clas

RPC源码阅读-交互协议

RPC主要分为3个部分:(1)交互协议(2)客户端(3)服务端 (1)交互协议 协议:把某些接口和接口中的方法称为协议,客户端和服务端只要实现这些接口中的方法就可以进行通信了 Hadoop RPC中VersionedProtocol是所有协议的父类,只定义了两个方法. package org.apache.hadoop.ipc; import java.io.IOException; /** * Superclass of all protocols that use Hadoop RPC. *

Hadoop源代码分析

关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://research.google.com/archive/googlecluster.html Chubby:http://labs.google.com/papers/chubby.html GFS:http://labs.google.com/papers/gfs.html BigTable:http://labs.googl

Hadoop 源代码分析(一七)DataNode

周围的障碍扫清以后,我们可以开始分析类DataNode.类图如下: publipublic class DataNode extends Configuredimplements InterDatanodeProtocol, ClientDatanodeProtocol, FSConsta nts, Runnable上面给出了DataNode 的继承关系,我们发现,DataNode 实现了两个通信接口,其中ClientDatanodeProtocol 是用于和Client交互的,InterDat

datanode与namenode的通信

在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. A. DataNode的主要工作流程1. 客户端和DataNode的通信: 客户端向DataNode的`数据块读写`, 采用TCP/IP流接口(DataXceiver)进行数据传输 2. 客户端在检测到DataNode异常, 主动发起的`数据块恢复`, 客户端会通过ClientDatanodeProtocol接口采用RPC调用的方式和DataNode通信. 3. `数据块替换和拷贝`

Cisco-HSRP 热备份路由器协议-配置实例

同样的,首先做一些理论的扫盲.最起码要知道自己在配什么东西才行. 简介 HSRP(Hot StandbyRouter Protocol 热备份路由器协议)是Cisco的专有协议.HSRP把多台路由器组成一个"热备份组",形成一个虚拟路由器.这个组内只有一个路由器是Active(活动)的,并由它来转发数据包,如果活动路由器发生了故障,备份路由器将成为活动路由器.从网络内的主机来看,网关并没有改变. HSRP的工作过程 HSRP路由器利用Hello包来互相监听各自的存在.当路由器长时间没有