设为首页 收藏本站
查看: 1341|回复: 0

[经验分享] hadoop源代码--DatanodeProtocol

[复制链接]

尚未签到

发表于 2015-7-12 12:00:10 | 显示全部楼层 |阅读模式
  原文转自博客: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;
  提交块的状态信息

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85800-1-1.html 上篇帖子: hadoop实例---多表关联 下篇帖子: 《Hadoop应用开发技术详解》
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表