欢迎来到天天文库
浏览记录
ID:42595605
大小:27.44 KB
页数:9页
时间:2019-09-18
《hadoop rpc服务端初始化和调用过程详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本文主要描述了hadooprpc服务端的初始化和调用过程,相比客户端的初始化,rpc服务端感觉会简单点,但是调用过程却比客户端复杂一些。本文还是以namenode为例,namenode会在执行main方法的时候,创建一个namenode实例,及完成一系列的初始化过程,其中就包括了rpc的初始化过程。rpc服务端的初始化上面已经提到我们这里主要借用了namenode的远程服务,先来看看相关代码:?12345678910111213141516171819publicclassNameNodeimplementsName
2、NodeStatusMXBean{publicstaticvoidmain(Stringargv[])throwsException{ NameNodenamenode=createNameNode(argv,null);} protectedNameNode(Configurationconf,NamenodeRolerole)throwsIOException{ initialize(conf);} protectedvoidinitialize(Configurationconf
3、)throwsIOException{ rpcServer=createRpcServer(conf); startCommonServices(conf);//相当重要} protectedNameNodeRpcServercreateRpcServer(Configurationconf)throwsIOException{ returnnewNameNodeRpcServer(conf,this); }}我们的linux的终端执行hadoop的启动命令的时候,最
4、终的命令是调用NameNode的main方法,所以我们追踪代码的切入点是NameNode的main方法,方法比较简单,就是调用NameNode的构造函数创建一个NameNode,然后执行初始化方法initialize,这个方法相对来说,是我们关注的重点,包括rpc服务在内的初始化操作都放在这个方法里面。特定于rpc,他执行了两个相关的方法createRpcServer和startCommonServices,第一个方法见名思意,不多说,先简单介绍下后面的方法,该方法的作用就是启动namenode的rpc服务,稍后我给
5、出代码。好的,从上面的代码可以看到,我们的rpcServer功能都放在了类NameNodeRpcServer里面,现在让我们来看看这个类里面相关的代码:?12345678910111213141516171819202122232425262728293031323334classNameNodeRpcServerimplementsNamenodeProtocols{publicNameNodeRpcServer(Configurationconf,NameNodenn) throwsIOExceptio
6、n{ RPC.setProtocolEngine(conf,ClientNamenodeProtocolPB.class, ProtobufRpcEngine.class); ClientNamenodeProtocolServerSideTranslatorPB clientProtocolServerTranslator= newClientNamenodeProtocolServerSideTranslatorPB(this
7、); BlockingServiceclientNNPbService=ClientNamenodeProtocol. newReflectiveBlockingService(clientProtocolServerTranslator); InetSocketAddressrpcAddr=nn.getRpcServerAddress(conf);//fs.defaultFS StringbindHost=nn.getRpcServerBindHost
8、(conf); if(bindHost==null){ bindHost=rpcAddr.getHostName(); } LOG.info("RPCserverisbindingto"+bindHost+":"+rpcAddr.getPort()); this.clientRpcServer=newRPC.
此文档下载收益归作者所有