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. SDL1.2到2.0的迁移指南(转)

    里面有些单词不好翻译所以放在开头,以备查验. BLock Image Transfer, a computer graphics operation in which two bitmap patte ...

  2. 简单ssh框架整合

    Struts2+Spring4 +Hibernate4 首先看看建立项目的框架 第一步  建立web项目 第二步  导入相对应需要的jar包(放在项目WEB-INFO/lib下) 需要导入Spring ...

  3. Redhat Linux 性能 - 内置的 sar

    缺省 / 默认 Redhat Linux 会自动使用 sar 采集系统性能信息,并记录到 /var/log/sa 每 10分钟采集一次, 记录 CPU / Memory / Disk / Networ ...

  4. redis+tomcat+nginx session共享

    http://www.cnblogs.com/zhrxidian/p/5432886.html系列课程 简洁明了 http://blog.csdn.net/grhlove123/article/det ...

  5. centos7命令

    查看ip ip addr ip link 添加服务 systemctl enable nginx 添加防火墙端口 firewall-cmd --zone=public --add-port=80/tc ...

  6. js高级程序设计(三)基本概念

    数据类型 ECMAscript中有五种简单数据类型Undefined,Null,Boolean,Number,String 还有一种复杂数据类型Object. typeof操作符 typeof可能返回 ...

  7. selenium+python笔记9

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: delete mail 我们多添加一些测试场景,比如:删 ...

  8. css3制作滚动按钮

    1,中间圆点用到css3的gradient属性 2,运动用到css3的transition属性 3,需要写各个浏览器的兼容 代码如下 <!DOCTYPE html> <html la ...

  9. 《javascript高级程序设计》 第23章 离线应用与客户端存储

    23.1 离线检测23.2 应用缓存23.3 数据存储 23.3.1 Cookie 23.3.2 IE 用户数据 23.3.3 Web 存储机制 23.3.4 IndexedDB   23.1 离线检 ...

  10. 通过Sql语句导数据

    在通过SQL Server向导中的SQL语句导数据时,默认情况下源表中的nvarchar字段类型会变成202,解决此问题的方法是,要重新选择一下对应的数据接收表.