一、基础知识

  原理 http://www.cnblogs.com/edisonchou/p/4285817.html,这个谢了一些rpc与hadoop的例子。

  用到了java的动态代理,服务端实现一个接口,客户端得到这个接口的实现类,客户端通过自定义的versionID来标志一对服务端和客户端。

二、代码

  2.1 接口

package rpc;

import org.apache.hadoop.ipc.VersionedProtocol;
//默认情况下,不同版本号的RPC Client和Server之间不能相互通信,因此客户端和服务端通过版本号标识。 public interface RPCable extends VersionedProtocol {
public static final long versionID = 10010;
public String sayHi(String name) ; }

  我原来没继承VersionedProtocol接口,也成功了。接口不能在实现接口

  2.2 服务端

package rpc;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.ProtocolSignature;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server; //动态代理:客户端和服务端同时实现一个接口
//可以在linux和win下
//不同main进程下相互调用 //是不同进程见的方法调用
//底层走的是jav的rmi public class RPCServer implements RPCable{ public String sayHi(String name) {
return "HI!"+name;
} public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
//方法的调用连 因为每次调用返回的是this
Server server = new RPC.Builder(conf).setProtocol(RPCable.class).
setInstance(new RPCServer()).setBindAddress("localhost").
setPort(9527).build();
server.start(); } @Override
public ProtocolSignature getProtocolSignature(String arg0, long arg1,
int arg2) throws IOException {
// TODO Auto-generated method stub
return null;
} @Override
public long getProtocolVersion(String arg0, long arg1) throws IOException {
// TODO Auto-generated method stub
return 0;
}; }

  我原来没继承VersionedProtocol类,那么服务端不需要下面的两个方法,继承了以后必须写。

  2.3 客户端

package rpc;

import java.io.IOException;
import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC; //打印在客户端 拼接字符串确实在服务端 public class RPCClient { public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//协议一般是.class
RPCable proxy = RPC.getProxy(RPCable.class, 10010,
new InetSocketAddress("localhost",9527), new Configuration());
String res = proxy.sayHi("!!!!!!!!!!!!");
System.out.println(res);
RPC.stopProxy(proxy);
} }

三、结束

  rpc不受系统、地理位置的限制。

  不相信的话可以在和护短打断点,一步一步发现进入了;额服务器端。

  做的时候如果不知道使用那个类哭下的东西,可以打开对应类的class文件,可能是黑色,不是源码,那么点击attach source找到hadoop的源码包就可以了,导进去就看到的是普通的和咱的java类似的文件,可以看看里面的蚕食来自那个包。

Hadoop的RPC分析的更多相关文章

  1. hadoop的RPC机制 -源码分析

    这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...

  2. Hadoop的RPC机制源码分析

    分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...

  3. 源码级强力分析hadoop的RPC机制

    分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://weixiaolu.iteye.com/blog/1477774 )2. Java ...

  4. Hadoop的RPC框架介绍

    为什么会引入RPC: RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.当我们讨论HDFS的,通信可能发生在: Client-NameNode之间,其中NameNod ...

  5. Hadoop之RPC简单使用(远程过程调用协议)

    一.RPC概述 RPC是指远程过程调用,也就是说两台不同的服务器(不受操作系统限制),一个应用部署在Linux-A上,一个应用部署在Windows-B或Linux-B上,若A想要调用B上的某个方法me ...

  6. hadoop源码分析(2):Map-Reduce的过程解析

    一.客户端 Map-Reduce的过程首先是由客户端提交一个任务开始的. 提交任务主要是通过JobClient.runJob(JobConf)静态函数实现的: public static Runnin ...

  7. Hadoop源码分析之数据节点的握手,注册,上报数据块和心跳

    转自:http://www.it165.net/admin/html/201402/2382.html 在上一篇文章Hadoop源码分析之DataNode的启动与停止中分析了DataNode节点的启动 ...

  8. 4. hadoop启动脚本分析

    4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...

  9. hadoop源码分析

    hadoop 源代码分析(一) Google 的核心竞争技术是它的计算平台.HadoopGoogle的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://rese ...

随机推荐

  1. JVM监测&工具[转]

    通过工具及Java api来监测JVM的运行状态, 需要监测的数据:(内存使用情况 谁使用了内存 GC的状况) 内存使用情况--heap&PermGen @ 表示通过jmap –heap pi ...

  2. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...

  3. 使用管道(PipeLine)和批量(Batch)操作

    使用管道(PipeLine)和批量(Batch)操作 前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为product ...

  4. 20145230GDB调试汇编堆栈过程分析

    20145230GDB调试汇编堆栈过程分析 分析过程 出现的问题:一开始无法编译,是因为我们的Linux中没有安装一个库. 进入之前先设置断点,之后disassemble可以获取汇编代码,用i r指令 ...

  5. 翻译qmake文档(三) Creating Project Files

    翻译qmake文档 目录   原英文文档:http://qt-project.org/doc/qt-5/qmake-project-files.html   创建项目文件 项目文件包含qmake构建你 ...

  6. 让 Generator 自启动

    文章同步自个人博客:http://www.52cik.com/2016/07/11/generator-co.html 此前只是简单使用而没有真正的去研究 Generator,这次要好好折腾下这货. ...

  7. UltraEdit 编译输出中文乱码的解决办法

    配置UE的时候,都告诉大家javac   %n%e 接可以了,但是再运行的时候,会出现乱码,再加上-J-Duser.language=GBK就可以了,也就是下面的样子. javac -J-Duser. ...

  8. Jmeter测试工具使用

    启动Jmeter: 路径:\apache-jmeter-2.13\bin\jmeter.bat 一.测试Http请求: 建立过程: 1.  测试计划--添加---Threads--线程组 2.  线程 ...

  9. app状态监听广播

    手机中的应用在安装.更新和卸载时都会发送广播 清单文件 <?xml version="1.0" encoding="utf-8"?> <man ...

  10. [转]mysql免安装版配置

    现在mysql有一个installer,相当于安装包管理器.包含mysql的各个组件,比如workbench,各个语言的connector.十分方便,不用就可惜了.实在没有必要下载zip版,自己配置. ...