当前位置: 首页>>Hadoop技术内幕(YARN)>> 阅读正文

Hadoop技术内幕(YARN)第7章问题讨论

Category: Hadoop技术内幕(YARN) View: 1,638 Author: Dong
, ,

  • 评论 (1)
  • 引用通告 (0)
发表评论 发起引用

  • 1楼ryanbupt 回复

    Post: 2014-12-06 10:16

    董老师您好,我目前在学习nodemanager的代码(2.5.0),有一点疑问,想请您帮忙看一下
    在nm的心跳汇报线程里,resync命令的检查,在removeCompletedContainersFromContext方法调用之前,对此代码里有一段注释,
    // Explicitly put this method after checking the resync response. We
    // don’t want to remove the completed containers before resync
    // because these completed containers will be reported back to RM
    // when NM re-registers with RM.
    removeCompletedContainersFromContext();
    我理解他意思是说在进行resync之前希望nm内存里保存的containers信息是尽量全的,不去删除任何completed containers。
    我的疑问是,当nm因为resync重新向rm注册时,确实会带上container的信息,并且理论上是全部为completed状态的,但是rm在下发resync命令给nm之前,是触发了这个node的deactiveNodeTransition(REBOOTING事件)的,包括kill这上面所有的containers、将rmnode从rmContext的node列表里去掉等等,这时候nm因为resync而重新注册时,是属于old node rejoin的情况,它带上来的containers不会被处理。具体流程是
    RMNode oldNode = this.rmContext.getRMNodes().putIfAbsent(nodeId, rmNode); 这一句返回的应该是oldNode为null,触发了node STARTED事件,在AddNodeTransition中,rmNode.context.getInactiveRMNodes().containsKey(host)为真,不会去读汇报上来的containers列表。NodeAddedSchedulerEvent事件传入的containers是空的。
    请老师帮忙指正一下我的思路是否有误,是我漏掉了什么吗
    谢谢您的时间!

    [回复]

目前还没有任何Trackbacks和Pingbacks.
发表评论