全文预览

Hadoop中HDFS的实现代码分析

上传者:学习一点 |  格式:doc  |  页数:29 |  大小:768KB

文档介绍
ress(IP地址+端口号或主机名+端口号)对象和一个用户信息对象。这就是说,SocketAddress的通信将共享同一个连接。连接被封装在类Client.Connection中,所有的RPC调用都是通过Connection进行通信。一个RPC调用有输入参数,输出参数和可能的异常,同时,为了区分在同一个Connection上的不同调用,每个调用都有唯一的id。调用是否结束也需要一个标记,所有的这些都体现在对象Client.Call中。Connection对象通过一个Hash表,维护在这个连接上的所有Call:Java代码:private Hashtable<Integer, Call> calls = new Hashtable<Integer, Call>(); 一个RPC调用通过addCall,把请求加到Connection里。为了能够在这个框架上传输Java的基本类型,String和Writable接口的实现类,以及元素为以上类型的数组,我们一般把Call需要的参数打包成为ObjectWritable对象。Client.Connection会通过socket连接服务器,连接成功后回校验客户端/服务器的版本号(Client.ConnectionwriteHeader()方法),校验成功后就可以通过Writable对象来进行请求的发送/应答了。注意:每个Client.Connection会起一个线程,不断去读取socket,并将收到的结果解包,找出对应的Call,设置Call并通知结果已经获取。Call使用Obejct的wait和notify,把RPC上的异步消息交互转成同步调用。还有一点需要注意,一个Client会有多个Client.Connection,这是一个很自然的结果。下面介绍Server,.apache.hadoop.rpc.Server中的关键类和关键方法。

收藏

分享

举报
下载此文档