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;

    提交块的状态信息

  • 相关阅读:
    《基于CMMI的软件工程及实训指导》第一章读书心得
    第一个微信小项目
    自己设计大学排名-数据库实践
    第一次爬虫和测试
    预测球队比赛成绩
    自己的第一个网页
    科学计算和可视化
    第一个微信小项目
    数据库实际
    第一个爬虫和测试
  • 原文地址:https://www.cnblogs.com/serendipity/p/2352568.html
Copyright © 2011-2022 走看看