Hadoop 源代码分析(七)RPC-Server

聊完了Client 聊Server,按惯例,先把类图贴出来。

需要注意的是,这里的Server 类是个抽象类,唯一抽象的地方,就是

Java 代码

1. public abstract Writable call(Writable param, long receiveTime) throws IOException;

这表明,Server 提供了一个架子,Server 的具体功能,需要具体类来完成。而具体类,当然就是实现call 方法。

我们先来分析Server.Call,和Client.Call 类似,Server.Call 包含了一次请求,其中,id 和param 的含义和Client.Call

是一致的。不同点在后面三个属性,connection 是该Call 来自的连接,当然,当请求处理结束时,相应的结果会通过相同的

connection,发送给客户端。属性timestamp 是请求到达的时间戳,如果请求很长时间没被处理,对应的连接会被关闭,客户

端也就知道出错了。最后的response 是请求处理的结果,可能是一个Writable 的串行化结果,也可能一个异常的串行化结果。

Server.Connection 维护了一个来之客户端的socket 连接。它处理版本校验,读取请求并把请求发送到请求处理线程,接收处

理结果并把结果发送给客户端。

Hadoop 的Server 采用了Java 的NIO,这样的话就不需要为每一个socket 连接建立一个线程,读取socket 上的数据。在Server

中,只需要一个线程,就可以accept 新的连接请求和读取socket 上的数据,这个线程,就是上面图里的Listener。

请求处理线程一般有多个,它们都是Server.Handle 类的实例。它们的run 方法循环地取出一个Server.Call,调用Server.call

方法,搜集结果并串行化,然后将结果放入Responder 队列中。

对于处理完的请求,需要将结果写回去,同样,利用NIO,只需要一个线程,相关的逻辑在Responder 里。

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

时间: 2024-11-05 22:56:03

Hadoop 源代码分析(七)RPC-Server的相关文章

Hadoop源代码分析

关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://research.google.com/archive/googlecluster.html Chubby:http://labs.google.com/papers/chubby.html GFS:http://labs.google.com/papers/gfs.html BigTable:http://labs.googl

Hadoop源代码分析(完整版)-转载

Hadoop源代码分析(一) http://blog.csdn.net/huoyunshen88/article/details/8611629 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://research.google.com/archive/googlecluster.html Chubby:http://labs.google.com/papers/chubby.h

Hadoop源代码分析(MapTask辅助类 I)

Hadoop源代码分析(MapTask辅助类 I)MapTask的辅劣类主要针对Mapper的输入和输出.首先我们来看MapTask中用的的Mapper输入,在类图中,返部分位于右上角.MapTask.TrackedRecordReader是一个Wrapper,在原有输入RecordReader的基础上,添加了收集上报统计数据的功能.MapTask.SkippingRecordReader也是一个Wrapper,它在MapTask.TrackedRecordReader的基础上,添加了忽略部分输

Hadoop 源代码分析(五)RPC 框架

介绍完org.apache.hadoop.io 以后,我们开始来分析org.apache.hadoop.rpc.RPC 采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.当我们讨论HDFS 的,通信可能发生在: Client-NameNode 之间,其中NameNode 是服务器 Client-DataNode 之间,其中DataNode 是服务器 DataNode-NameNode 之间,其中NameNode 是服务器 DataNode-DateNode 之间,其中

Hadoop 源代码分析(一七)DataNode

周围的障碍扫清以后,我们可以开始分析类DataNode.类图如下: publipublic class DataNode extends Configuredimplements InterDatanodeProtocol, ClientDatanodeProtocol, FSConsta nts, Runnable上面给出了DataNode 的继承关系,我们发现,DataNode 实现了两个通信接口,其中ClientDatanodeProtocol 是用于和Client交互的,InterDat

Hadoop 源代码分析(六)RPC-Client

既然是RPC,自然就有客户端和服务器,当然,org.apache.hadoop.rpc 也就有了类Client 和类Server.在这里我们来仔细考察org.apache.hadoop.rpc.Client.下面的图包含了org.apache.hadoop.rpc.Client 中的关键类和关键方法.由于Client 可能和多个Server 通信,典型的一次HDFS 读,需要和NameNode 打交道,也需要和某个/某些DataNode 通信.这就意味着某一个Client 需要维护多个连接.同时

Hadoop源代码分析(*IDs类和*Context类)

我们开始来分析Hadoop MapReduce的内部的运行机制.用户向Hadoop提交Job(作业),作业在JobTracker对象的控制下执行.Job被分解成为Task(任务),分发到集群中,在TaskTracker的控制下运行.Task包括MapTask和ReduceTask,是MapReduce的Map操作和Reduce操作执行的地方.这中任务分布的方法比较类似于HDFS中NameNode和DataNode的分工,NameNode对应的是JobTracker,DataNode对应的是Tas

Hadoop源代码分析(MapReduce概论)

大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花很多的时间去介绍HDFS的背景,毕竟大家对文件系统的还是有一定的理解的,而且也有很好的文档.在分析Hadoop的MapReduce部分前,我们还是先了解系统是如何工作的,然后再进入我们的分析部分.下面的图来自http://horicky.blogspot.com/2008/11/hadoop-mapreduce-implementation.html,是我看到的讲MapReduce最好的图. 以Hadoop带的wordcount为例子(下面

Hadoop源代码分析(包hadoop.mapred中的MapReduce接口)

前面已经完成了对org.apache.hadoop.mapreduce的分析,这个包提供了Hadoop MapReduce部分的应用API,用于用户实现自己的MapReduce应用.但这些接口是给未来的MapReduce应用的,目前MapReduce框架还是使用老系统(参考补丁HADOOP-1230).下面我们来分析org.apache.hadoop.mapred,首先还是从mapred的MapReduce框架开始分析,下面的类图(灰色部分为标记为@Deprecated的类/接口): 我们把包m