Hadoop源码分析----RPC反射机制

有了Client 和Server,很自然就能RPC 啦。下面轮到RPC.java 啦。
一般来说,分布式对象一般都会要求根据接口生成存根和框架。如CORBA,可以通过IDL,生成存根和框架。但是,在
org.apache.hadoop.rpc,我们就不需要这样的步骤了。上类图。

为了分析Invoker,我们需要介绍一些Java 反射实现Dynamic Proxy 的背景。
Dynamic Proxy 是由两个class 实现的:java.lang.reflect.Proxy 和java.lang.reflect.InvocationHandler,后者是一个
接口。所谓Dynamic Proxy 是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface 给它,然后
该class 就宣称它实现了这些interface。
这个Dynamic Proxy 其实就是一个典型的Proxy 模式,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,
由它接管实际的工作。这个handler,在Hadoop 的RPC 中,就是Invoker 对象。
我们可以简单地理解:就是你可以通过一个接口来生成一个类,这个类上的所有方法调用,都会传递到你生成类时传递的
InvocationHandler 实现中。
在Hadoop 的RPC 中,Invoker 实现了InvocationHandler 的invoke 方法(invoke 方法也是InvocationHandler 的唯一方法)。
Invoker 会把所有跟这次调用相关的调用方法名,参数类型列表,参数列表打包,然后利用前面我们分析过的Client,通过socket
传递到服务器端。就是说,你在proxy 类上的任何调用,都通过Client 发送到远方的服务器上。
Invoker 使用Invocation。Invocation 封装了一个远程调用的所有相关信息,它的主要属性有: methodName,调用方法名,
parameterClasses,调用方法参数的类型列表和parameters,调用方法参数。注意,它实现了Writable 接口,可以串行化。
RPC.Server 实现了org.apache.hadoop.ipc.Server,你可以把一个对象,通过RPC,升级成为一个服务器。服务器接收到的请求(通过Invocation),
解串行化以后,就变成了方法名,方法参数列表和参数列表。利用Java 反射,我们就可以调用对应的对象的方法。调用的结果再通过socket,返
回给客户端,客户端把结果解包后,就可以返回给Dynamic Proxy 的使用者了。

更多分享请关注:http://bbs.superwu.cn

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

时间: 2024-10-14 11:33:19

Hadoop源码分析----RPC反射机制的相关文章

细水长流Hadoop源码分析(3)RPC Server初始化构造

声明:个人原创,转载请注明出处.文中引用了一些网上或书里的资料,如有不妥之处请告之. 本文是我阅读Hadoop 0.20.2第二遍时写的笔记,在阅读过程中碰到很多问题,最终通过各种途径解决了大部分.Hadoop整个系统设计精良,源码值得学习分布式的同学们阅读,以后会将所有笔记一一贴出,希望能方便大家阅读源码,少走弯路. 目录 4 RPC服务器(org.apache.hadoop,ipc.Server) 4.1 服务器初始化 4 RPC服务器(org.apache.hadoop,ipc.Serve

hadoop源码分析解读入门

hadoop 源代码分析(一) Google 的核心竞争技术是它的计算平台.HadoopGoogle的大牛们用了下面5篇文章,介绍了它们的计算设施. Google的几篇论文 GoogleCluster:http://research.google.com/archive/googlecluster.html Chubby:http://labs.google.com/papers/chubby.html GFS:http://labs.google.com/papers/gfs.html Big

Hadoop源码分析(2)——Configuration类

这篇文章主要介绍Hadoop的系统配置类Configuration. 接着上一篇文章介绍,上一篇文章中Hadoop Job的main方法为: public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new CalculateSumJob(),args); System.exit(res); } 其中ToolRunner.run方法传入的第一个变量

Hadoop源码分析—— Job任务的程序入口

这篇文章大致介绍Hadoop Job的程序是如何启动的. 通常用Java编写的Hadoop MapReduce程序是通过一个main方法作为程序的整个入口,如下: public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new CalculateSumJob(),args); System.exit(res);} 可以看到这个Job任务的MapR

nginx的源码分析--间接回调机制的使用和类比

nginx使用了间接回调机制,结合upstream机制的使用来说明一下,首先明确几个事实: 1)其实ngxin和下游客户端的连接使用的是ngx_http_connection_t,每个连接对应着一个读事件.一个写事件,epoll监听队列监听的是事件(ngx_event_t),但是事件的data字段对应于这个事件所属的连接(ngx-connection_t).但是nginx和上游服务器之间的连接使用的ngx_peer_connection_t,其实ngx_peer_connection_t是ngx

【Zookeeper】源码分析之Watcher机制(一)

一.前言 前面已经分析了Zookeeper持久话相关的类,下面接着分析Zookeeper中的Watcher机制所涉及到的类. 二.总体框图 对于Watcher机制而言,主要涉及的类主要如下. 说明: Watcher,接口类型,其定义了process方法,需子类实现. Event,接口类型,Watcher的内部类,无任何方法. KeeperState,枚举类型,Event的内部类,表示Zookeeper所处的状态. EventType,枚举类型,Event的内部类,表示Zookeeper中发生的事

Hadoop源码分析之Map输入

对于MapReduce的输入输出Hadoop的官网如下所示 Input and Output types of a MapReduce job: (input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output) 这里将从源码分析 input <k1,v1>->map 的过程, Mapper 基

hadoop源码分析

hadoop 源代码分析(一) Google 的核心竞争技术是它的计算平台.HadoopGoogle的大牛们用了下面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:/

[hadoop]Hadoop源码分析-Context

学编程第一个肯定是hello world,Hadoop也不例外,它的hello world就是Wordcount,单词统计例子 1 package org.apache.hadoop.examples; 2 3 import java.io.IOException; 4 import java.util.StringTokenizer; 5 6 import org.apache.hadoop.conf.Configuration; 7 import org.apache.hadoop.fs.P