赞
踩
DataNode
会每6个小时上报块信息(数据、数据长度、校验和、时间戳),每3秒(心跳)汇报当前DataNode是否活着;超时则视为挂掉;
如图,NameNode启动时,主要的几个步骤分别是:
initDataXceiver
初始化服务线程,用于接收Client和其他DataNode发来的数据startInfoServer
初始化HTTP服务initIpcServer
初始化RPC服务端createBPOS
创建BPOS服务 ;connectToNNAndHadnshake
→registerDatanode
注册DataNode(RPC调用)sendHeartBeat
发送心跳(RPC调用)从DataNode.java进入,先进入main方法的secureMain方法;
进入secureMain中的createDataNode:
进入instantiateDataNode初始化方法
进入instantiateDataNode中的makeInstance创建实例对象
new DataNode
在 DataNode方法找到startDataNode
在startDataNode
的1417行找到initDataXceiver
服务线程(用来接收Client和其他DataNode发送过来的数据服务)
退回startDataNode,在1418行找到startInfoServer
,即要开启web服务
进入DatanodeHttpServer
进入DatanodeHttpServer,会由HttpServer2绑定serverlet;
退回startDataNodes,1430行找到initIpcServer
启动RPC服务端
退回startDataNode,1441行找到refreshNamenodes,即要向NameNode反向注册;
进入refreshNamenodes,找到doRefreshNamenodes:
进入doRefreshNamenodes,找到createBPOS,DataNode需要和NameNode心跳,则当有多个NameNode时(高可用),
使用for循环,对每个NameNode都会创建一个BPOS服务,最后开启所有服务
在startAll
中:
开启bpThread
线程的start(),对每个NameNode进行DataNode的注册;
进入bpThread
的run()方法,进入connectToNNAndHandshake
在connectToNNAndHandnshake()中会获取到NameNode的proxy代理对象dpNamenode,
底层通过RPC.getProxy
获取代理对象令为dpNamenode
并返回;
回到connectToNNAndHadnshake,开始注册;
进入register,可见执行了代理对象dpNamenode
的registerDatanode
方法,代理对象会将参数传到NameNodRpcServer同样的方法种去执行(RPC调用),只是看上去是由DataNode执行!
到此由DataNode向NameNode发送了注册信号,去namenodeRpcServer类中找到同样的registerDatanode
方法,
在1139行找到addDatanode,进行注册:①添加datanode ②添加心跳信息
(5)回到refreshNameNodes→doRefreshNamenodes→startAll→bpThread.run() 的847行找到offerService
()
进入offerService(),646行找到sendHeartBeat
发送心跳;
DataNode要向NameNode发送心跳属于跨进程通信,需要先拿到代理对象;
进入sendHeartBeat
方法,在516行找到:执行bpNamenode.sendHeartbeat
方法;
那么在namenodeRpcServer也有sendHeartbeat
方法:
进入handleHeartbeat,继续handleHeartbeat
找到 heartbeatManager更新心跳 updateHeartbeat:
进入多个updateHeartbeat最后进入updateHeartbeatState:
①更新上次发送心跳的时间,②将NameNode元数据存储状态发给DataNode;
回到namenodeRpcServer → sendHeartbeat → handleHeartbeat:
最后由return new HeartbeatResponse把NameNode的命令(如创建文件、删除文件的指令等)返回给DataNode,完成NameNode和DataNode的心跳通信。
到此,DataNode启动过程结束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。