zoukankan      html  css  js  c++  java
  • hadoop源代码DatanodeProtocol

    原文转自博客:http://www.oratea.net/?p=799,添加一些修改 。

    DatanodeProtocol.java
    路径:hadoop-0.19.2\src\hdfs\org\apache\hadoop\hdfs\server\protocol\DatanodeProtocol.java

    DatanodeProtocol是DataNode与NameNode通信的信息接口,接口定义了DataNode向ameNode发起的全部操作。

    1 public static final long versionID = 19L;

    这个标识了协议的版本信息,对于0.19.2来说是19L。

    2 final static int NOTIFY = 0;
    final static int DISK_ERROR = 1;
    final static int INVALID_BLOCK = 2;

    定义了常见的错误编码

    3 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

    定义了NameNode发送给DataNode的命令编码

    4 public DatanodeRegistration register(DatanodeRegistration registration
    ) throws IOException;

    在hdfs启动的时候,向NameNode注册该DataNode。registration表示DataNode的注册信息,
    主要包含DataNode的机器名,DataNode的端口,storageID,infoserver的端口,ipc server的端口,StorageInfo等。

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

    在hdfs的工作过程中,定期向NameNode发送的心跳信息,告诉NameNode自己还是活着的,在发送心跳的过程中也会顺便发送一些DataNode的状态信息。
    比如:当前DataNode的存储能力。已经空间,剩余空间等等。
    发送心跳的频率由dfs.heartbeat.interval参数控制,默认是3秒。
    NameNode接受到DataNode的心跳信息后,会将一些关于该DataNode的命令信息返回给DataNode,通过DatanodeCommand[]结构。

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

    在DataNode启动后会通过该方法向NameNode报告所有的本地存储的BLOCK的信息。
    块信息存储在long数组blocks中,使用long代替Block类型是为了节省内存使用。

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

    该方法允许DataNode向NameNode报告最近接收到的Block信息。比如当该DataNode产生新的Block,或者其他的DataNode复制一个Block到该DataNode,
    DataNode就会调用该方法向NameNode报告。

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

    DataNode通过该方法向NameNode报告错误信息,主要为了调试

    9  public NamespaceInfo versionRequest() throws IOException;

    从NameNode获取NamespaceInfo信息,NamespaceInfo主要包含buildVersion和distributedUpgradeVersion信息。

    10  UpgradeCommand processUpgradeCommand(UpgradeCommand comm) throws IOException;

    该方法在分布式的升级过程中向NameNode发送命令信息。

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

    DataNode通过该方法向NameNode发送坏块的信息

    12  public long nextGenerationStamp(Block block) throws IOException;

    获得新的Stamp信息,Stamp是每个Block的版本信息

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

    提交块的状态信息

  • 相关阅读:
    hdu 1281 棋盘游戏(二分匹配)
    UVA 12545 Bits Equalizer
    算法之匈牙利算法
    I题 hdu 1234 开门人和关门人
    H题 hdu 2520 我是菜鸟,我怕谁
    G题 hdu 1466 计算直线的交点数
    F题 hdu 1431 素数回文
    E题hdu 1425 sort
    D题 hdu 1412 {A} + {B}
    有12个球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,需要几次把这个小球找出来并且求出这个小球是比其他的轻还是重
  • 原文地址:https://www.cnblogs.com/serendipity/p/2352568.html
Copyright © 2011-2022 走看看