DataNode与Namenode的互动

DataNode与NameNode之间基本的通信就是rpc

(1)登记,dataNode一经启动就应该主动与namenode 建立rpc连接,并向其登记,让Namenode知道有这么一个DataNode已经在位了。

(2)向NameNode发送心跳信号并在这上面搭载各种报告,一来让它知道这个DataNode继续存在,二来让它知道这个DataNode上的存储发生了一些什么变化,特别是节点上有哪些数据块的副本,以及还有多少资源可供使用,这也总是由DataNode主动发起的。

(3)NameNode发回响应消息,由DataNode执行NameNode搭载在响应信息里的命令和要求。

心跳机制

    Hadoop集群是master/slave模式,master包括NameNode和ResourceManager,slave包括DataNode和NodeManager。

     master启动的时候,会开一个 rpc server那里,等待slave心跳。slave启动时,会连接master,并每隔3秒钟主动向master发送一个"心跳",这个时间可以通过"hearbeat.recheck.interval"属性来设置,将自己的状态信息告诉master,然后master也是通过这个心跳的返回值,向slave节点传达指令。

    需要指出的是,namenode与datanode之间的通信,ResourceManager与NodeManager之间的通信,都是通过"心跳"完成的。

(一)DataNode与NameNode之间的心跳

            DataNode上对于每个NameNode都有个BPServiceActor线程,这个线程会定期向其NameNode发送心跳报告。

             在NameNode端,DataNode这一边的BPServiceActor线程通过BP和Rpc机制将心跳报文发送到NameNode这一边,然后就睡眠等待Namenode发回响应报文。

              在NameNode端,NameNode这一边由NameNodeRpcServer负责接收和处理来自各个DataNode的心跳和报告做出反应,所以NameNode上的pb层接收到来自DataNode的心跳报文以后会调用NameNodeRpcserver的sendHearbeat()方法。

               DataNode这一边sendHearbeat,NameNode这一边receiveHearbeat,但是由于rpc要求两边的函数名相同,所以Namenode这一边也是sendHearbeat。但事实上,Namenode不会发送心跳信号。

hadoop通信机制:

hadoop的通信机制就是rpc

    rpc是“Remote Peocedure Call”即"远地址过程调用"的缩写,这个机制的目的,是让一台机器上的程序像调用本地的"过程"那样来调用别的机器上的某些过程。

    对rpc机制的要求:从程序代码上看,过程的调用者就好像在调用本地函数一样,但是被调用过程的代码实际上在别的机器上,被调用的过程是在别的机器上执行,然后返回执行的结果,对调用者而言就像从本地的函数调用返回一样,在这个过程中,调用者(线程)发动调用之后,就会进入睡眠,直至调用返回时才被唤醒。

转载于:https://my.oschina.net/u/4009325/blog/2396172

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值