欢迎来到天天文库
浏览记录
ID:38259805
大小:226.54 KB
页数:13页
时间:2019-06-07
《hadoop-RPC机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、首先总结HDFS的设计架构,了解需要RPC通信的场景。HDFS的架构采用master/slave模式,一个HDFS集群是由一个Namenode和多个Datanode组成。在HDFS集群中,只有一个Namenode结点。Namenode作为HDFS集群的中心服务器,主要负责:n管理集群中文件系统的命名空间。n管理文件块和datanode的映射。n管理datanode的状态报告。Datanode的主要功能是:n负责节点上数据的读写操作。n向Namenode结点报告状态。n执行流水线复制。通过上面的叙述,可以看到,在HDFS集群中,存在三个主要的进程:Namenode进程、Datano
2、de进程和文件系统客户端进程,这三个进程之间都是基于Hadoop实现的RPC机制进行通信的,该IPC模型基于Client/Server模式进行通信。因此上述三个进程之间存在如下端到端通信与交互:1、(Client)Datanode /Namenode(Server)2、(Client)DFSClient /Namenode(Server)3、(Client)DFSClient /Datanode(Server)4、(Client)DatanodeA /DatanodeB(Server)1.Client端分析客户端Client类提供的最基本的功能就是进行RPC调用,其中,提供了两种
3、调用方式,一种就是串行单个调用,另一种就是并行调用,分别介绍如下。首先是串行单个调用的实现方法call,如下所示:publicWritablecall(Writableparam,InetSocketAddressaddr,Class>protocol,UserGroupInformationticket)throwsInterruptedException,IOException{Callcall=newCall(param);//根据传入的addr,protocol和ticket构造connectionId对象,在client的connections池中检索是否已经存在,
4、如果存在返回相应的connection//对象,否则构造一个新的connection对象,将其加入到池中。并将该call加入到该connection的calls调用表中,然后调用setupIOstreams,该//法的功能是ConnecttotheserverandsetuptheI/Ostreams.Itthensendsaheadertotheserverandstartstheconnection//threadthatwaitsforresponses.Connectionconnection=getConnection(addr,protocol,ticket,call
5、);connection.sendParam(call);//sendtheparameterbooleaninterrupted=false;synchronized(call){while(!call.done){try{//waitfortheresult正常应该被callComplete唤醒//voidjava.lang.Object.wait()throwsInterruptedExceptionCausesthecurrentthreadtowaituntilanotherthread//invokesthejava.lang.Object.notify()metho
6、dorthejava.lang.Object.notifyAll()methodforthisobject.call.wait();}catch(InterruptedExceptionie){//savethefactthatwewereinterruptedinterrupted=true;}}if(interrupted){//settheinterruptflagnowthatwearedonewaitingThread.currentThread().interrupt();}if(call.error!=null){if(call.errorinstanceofRem
7、oteException){call.error.fillInStackTrace();throwcall.error;}else{//localexceptionthrowwrapException(addr,call.error);}}else{returncall.value;}}}并行调用的实现方法:/*Makesasetofcallsinparallel.Eachparameterissenttothecorrespondingaddress.When*allvalue
此文档下载收益归作者所有