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

介绍完org.apache.hadoop.io 以后,我们开始来分析org.apache.hadoop.rpc。RPC 采用客户机/服务器模式。请求程序就是一
个客户机,而服务提供程序就是一个服务器。当我们讨论HDFS 的,通信可能发生在:
Client-NameNode 之间,其中NameNode 是服务器
Client-DataNode 之间,其中DataNode 是服务器
DataNode-NameNode 之间,其中NameNode 是服务器
DataNode-DateNode 之间,其中某一个DateNode 是服务器,另一个是客户端
如果我们考虑Hadoop 的Map/Reduce 以后,这些系统间的通信就更复杂了。为了解决这些客户机/服务器之间的通信,Hadoop
引入了一个RPC 框架。该RPC 框架利用的Java 的反射能力,避免了某些RPC 解决方案中需要根据某种接口语言(如CORBA 的IDL)
生成存根和框架的问题。但是,该RPC 框架要求调用的参数和返回结果必须是Java 的基本类型,String 和Writable 接口的实
现类,以及元素为以上类型的数组。同时,接口方法应该只抛出IOException 异常。
既然是RPC,当然就有客户端和服务器,当然,org.apache.hadoop.rpc 也就有了类Client 和类Server。但是类Server 是一
个抽象类,类RPC 封装了Server,利用反射,把某个对象的方法开放出来,变成RPC 中的服务器。
下图是org.apache.hadoop.rpc 的类图。 

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

关注超人学院微信:BJ-CRXY

扫一扫微信二维码:

时间: 2024-10-13 12:17:40

Hadoop 源代码分析(五)RPC 框架的相关文章

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的基础上,添加了忽略部分输

[Android] Volley源代码分析(五岁以下儿童)Q \\ u0026一个

Volley源代码分析系列那里一段时间,告诉我,有许多私人留言,同时一些问题抛出.对于一些简单的问题,我们跳,这两天被连接到朋友@smali提出的问题.告诉我你不得不赞叹查看源代码时的详细程度,大家一块思考一下. Q:在写入文件头数据的时候为何不直接写入Int而是通过移位的方式来完毕? 我们来看一下相应的源代码: writeInt(os, CACHE_MAGIC); static void writeInt(OutputStream os, int n) throws IOException {

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

Hadoop源代码分析(包mapreduce.lib.input)

接下来我们按照MapReduce过程中数据流动的顺序,来分解org.apache.hadoop.mapreduce.lib.*的相关内容,并介绍对应的基类的功能.首先是input部分,它实现了MapReduce的数据输入部分.类图如下: 类图的右上角是InputFormat,它描述了一个MapReduceJob的输入,通过InputFormat,Hadoop可以: l          检查MapReduce输入数据的正确性: l          将输入数据切分为逻辑块InputSplit,这

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