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_开头的了

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

  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开始3——ClientProtocol、DatanodeProtocol、NamenodeProtocol、RefreshAuthorizationPolicyProtocol、RefreshUserMappingsProtocol

    1.ClientProtocol这个玩意的版本号是61L:DatanodeProtocol 是26L:NamenodeProtocol是 3L;RefreshAuthorizationPolicyPr ...

  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 RPC源码阅读-交互协议

    Hadoop版本Hadoop2.6 RPC主要分为3个部分:(1)交互协议(2)客户端 (3)服务端 (1)交互协议 协议:把某些接口和接口中的方法称为协议,客户端和服务端只要实现这些接口中的方法就可 ...

  6. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  7. Hadoop学习笔记之三:DataNode

    DataNode对ClientDatanodeProtocol.InterDatanodeProtocol两个协议接口进行了实现,通过ipc::Server向Client.其它DN提供RPC服务(参见 ...

  8. Hadoop源代码分析(完整版)

    Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http:// ...

  9. datanode与namenode的通信

    在分析DataNode时, 因为DataNode上保存的是数据块, 因此DataNode主要是对数据块进行操作. A. DataNode的主要工作流程1. 客户端和DataNode的通信: 客户端向D ...

随机推荐

  1. MSDTC故障排除,DTCTester用法 (二)

    摘自:https://support.microsoft.com/zh-cn/kb/293799#bookmark-4 ———————————————————————————— 概要 DTCTeste ...

  2. linux 如何改变文件属性与权限

    我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介绍几个常用于群组.拥有者.各种身份的权限的指令.如下所示: chgr ...

  3. openstack(liberty):部署实验平台(二,简单版本软件安装 part2)

    继续前面的part1,将后续的compute以及network部分的安装过程记录完毕! 首先说说compute部分nova的安装. n1.准备工作.创建数据库,配置权限!(密码依旧是openstack ...

  4. Visual Studio 2013中的新项目对话框

    在Visual Studio 2013,我们推出了添加新的项目对话框. 此对话框取代了是曾在2012年这个的对话框作品,所有ASP.NET项目(MVC,Web窗体和Web API). 这就是我们如何提 ...

  5. 注意:MainActivity的oncreate方法里不要再inflate布局了(MainActivity里的点击事件无响应)

    activity_main已经通过setContentView(R.layout.activity_main);设置给MainActivity, 不要再inflate出新布局,然后findviewby ...

  6. Ubuntu15.10下制作Linux 操作系统优盘启动盘

    上次电脑出现了一些问题,于是不得不重新装机了.下面就跟大家分享一下我在Ubuntu下制作优盘启动盘的一些心得. 准备原料 我这里用到的是 镜像文件是:debian-8.3.0-amd64-DVD-2. ...

  7. 数据分析——numpy

    DIKW DATA-->INFOMATION-->KNOWLEDGE-->WISDOM 数据-->信息-->知识-->智慧 爬虫-->数据库-->数据分 ...

  8. 一文带你看懂cookie,面试前端不用愁

    本文由云+社区发表 在前端面试中,有一个必问的问题:请你谈谈cookie和localStorage有什么区别啊? localStorage是H5中的一种浏览器本地存储方式,而实际上,cookie本身并 ...

  9. CentOS 7.5 安装KVM虚拟机(Linux)

    1.认识理解KVM虚拟机 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linu ...

  10. redis 的消息队列 VS kafka

    redis push/pop VS pub/sub (1)push/pop每条消息只会有一个消费者消费,而pub/sub可以有多个 对于任务队列来说,push/pop足够,但真的在做分布式消息分发的时 ...