Hadoop源代码分析【RPC】

2019-03-28 14:19|来源: 网络

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的类图。

hadoop中RPC的使用方法

【2-反射方式】该RPC框架利用 的Java的反射能力,避免了某些RPC解决方案中需要根据某种接口语言(如CORBA的IDL)生成存根和框架的问题。为什么Corba使用IDL要生成存根和框架?因为调用对象方法在编译期间会做静态检查,所以生成存根作为代理,可以使用代理通过静态检查。同【1-代理方式】,不过Hadoop的 RPC可以直接通过传递参数在运行时生成本地代理,这样使用更加方便。

相关问答

更多
  • 要是那么容易找到的话 做网站的就不用吃饭了 他们的地址都是有加密 不过如果你不怕麻烦的话 可以在浏览器的临时文件里一个个的看 应该会有你要找的东西 还有 就是找个flash下载软件 他会帮你找的
  • HashMap ,都知道哪里要用 HashMap ,知道 Hashtable 和 HashMap 之间的区别 ,那么 为何这道面试题如此特殊呢?是因为这道题考察的深度很深。 这题经常出现在高级或中高级 面试中。投资银行更喜欢问这个问题,甚至会要求你实现 HashMap 来考察你的编程能力。 ConcurrentHashMap 和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的 旅程吧!
  • 第一个阶段:学习hadoop基本使用和基本原理,从应用角度对hadoop进行了解和学习 这是第一个阶段,你开始尝试使用hadoop,从应用层面,对hadoop有一定了解,比如你可以使用hadoop shell对hdfs进行操作,使用hdfs API编写一些程序上传,下载文件;使用MapReduce API编写一个数据处理程序。一旦你对hadoop的基本使用方法比较熟悉了,接下来可以尝试了解它的内部原理,注意,不需要通过阅读源代码了解内部原理,只需看一些博客,书籍,比如《Hadoop权威指南》,对于HDFS而 ...
  • 源码分析是程序员离不开的话题。无论是研究开源项目,还是平时做各类移植、开发,都避免不了对源码的深入解读。   传统的命令行工具 Cscope, Ctags 可以结合 vim 等工具提供高效快捷的跳转,但是无法清晰的展示函数内部的逻辑关系。   至于图形化的IDE,如 QtCreator, Source Insight, Eclipse, Android Studio 等,却显得笨重,而且不一定支持导出调用关系图。
  • 我认为你的环境缺少FINDBUGS_HOME。 你可以从这里下载并安装findbugs。 之后,您应该运行以下来定义FINDBUGS_HOME: export FINDBUGS_HOME=/path/to/findbugs/installation 现在,由于缺少FINDBUGS_HOME环境变量,您的构建不应该失败。 I have solved by following commands: mvn clean mvn compile -Pnative mvn package mvn compil ...
  • 你看过SVN的源代码吗? 这里是。 http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/ Did you look at the source code in SVN? Here it is. http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-mapreduce-project/hadoop- ...
  • 我明白了.........我没有构建(编译)本机库和命令 “mvn包-Pdist,native,docs -DskipTests -Dtar”我说打包它。 没有必要自己构建(编译)本机库。 所以有命令打包源代码没有本机库和文档,即“mvn package -Pdist -DskipTests -Dtar”,它成功运行而没有错误。 使用此命令,我们可以从源代码创建“hadoop distribution” I got the point......... i haven't built(compiled) n ...
  • 我写了一篇关于这个主题的博客文章 - 您应该能够按照这些说明从源代码构建自己的源jar: http://whiteycode.blogspot.com/2012/05/building-hadoop-source-jars.html I've written a blog post on this subject - you should be able to follow these instructions to build your own source jar from the source: ht ...
  • hadoop 0.20不支持这个,请阅读本期https://issues.apache.org/jira/browse/HADOOP-6889 hadoop 0.20 doesn't support this, please read this issue https://issues.apache.org/jira/browse/HADOOP-6889
  • 映射器api https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/Mapper.html 减少api https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/Reducer.html 帮助您入门的教程 http://hadoop.apache.org/docs/r0.18.3/mapred_tutorial.html The mapper ...