jdk中已经提供了一个RPC框架—RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架。

 

  同其他RPC框架一样,Hadoop RPC分为四个部分:

  (1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型;

  (2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用;

  (3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制;

  (4)服务器端框架层:RPC Server利用java NIO以及采用了事件驱动的I/O模型,提高RPC Server的并发处理能力;

下面是基于Hadoop2.6版本的简单例子

   一、定义接口

public interface IProxyProtocol extends VersionedProtocol {
static final long versionID= 23234L; //版本号,默认情况下,不同版本号的RPC Client和Server之间不能相互通信
int Add(int number1,int number2);
}

  二、实现接口

public class MyProxy implements IProxyProtocol {
public int Add(int number1,int number2) {
System.out.println("我被调用了!");
int result = number1+number2;
return result;
} public long getProtocolVersion(String protocol, long clientVersion)throws IOException {
        System.out.println("MyProxy.ProtocolVersion=" + IProxyProtocol.versionID); 

        // 注意:这里返回的版本号与客户端提供的版本号需保持一致 
return IProxyProtocol.VERSION;
} public ProtocolSignature getProtocolSignature(String arg0,long arg1,int arg2) throws IOException{ return new ProtocolSignature(); }
}

  三、服务器端代码

public class MyServer {
public static int PORT = 5432;
public static String IPAddress = "127.0.0.1"; public MyServer (){
MyProxy proxy = new MyProxy();
RPC.Builder ins = new RPC.Builder(new Configuration);
ins.setInstance(proxy);
ins.setBindAddress(IPAddress);
ins.setPort(PORT);
ins.setProtocol(MyProxy.class);
Server server;
try{
server = ins.build();
server.start();
}catch(Exception e){
e.printStackTrace();
}
} public static void main(String[] args) throws Exception {
MyProxy proxy = new MyProxy();
}
}

  四、客户端代码,注意在调用完后要RPC.stopProxy(proxy)关闭连接。

 
public class MyClient {

    public static void main(String[] args) {
InetSocketAddress inetSocketAddress = new InetSocketAddress(
MyServer.IPAddress, MyServer.PORT); try {
// 注意:这里传入的版本号需要与代理保持一致
IProxyProtocol proxy = (IProxyProtocol) RPC.waitForProxy(
IProxyProtocol.class, IProxyProtocol.versionID, inetSocketAddress,
new Configuration());
int result = proxy.Add(10, 25);
System.out.println("10+25=" + result); RPC.stopProxy(proxy);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
 

  先启动服务端代码,再启动客户端代码。

Hadoop RPC简单例子的更多相关文章

  1. Hadoop RPC简单实例

    1.导入Hadoop-Common-2.6.0.jar导入工程,里面的IPC实现RPC需要的文件. 2.服务器端  (1)服务接口 package com.neu.rpc.server; /** * ...

  2. hadoop mapreduce 简单例子

    本例子统计 用空格分开的单词出现数量(  这个Main.mian 启动方式是hadoop 2.0 的写法.1.0 不一样 ) 目录结构: 使用的 maven : 下面是maven 依赖. <de ...

  3. hadoop学习第四天-Writable和WritableComparable序列化接口的使用&&MapReduce中传递javaBean的简单例子

    一. 为什么javaBean要继承Writable和WritableComparable接口? 1. 如果一个javaBean想要作为MapReduce的key或者value,就一定要实现序列化,因为 ...

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

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

  5. Hadoop RPC源码分析

    Hadoop RPC源码分析 上一篇文章http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析. RPC ...

  6. Hadoop系列番外篇之一文搞懂Hadoop RPC框架及细节实现

    @ 目录 Hadoop RPC 框架解析 1.Hadoop RPC框架概述 1.1 RPC框架特点 1.2 Hadoop RPC框架 2.Java基础知识回顾 2.1 Java反射机制与动态代理 2. ...

  7. Hadoop RPC通信

    Remote Procedure Call(简称RPC):远程过程调用协议 1. 通过网络从远程计算机程序上请求服务 2. 不需要了解底层网络技术的协议(假定某些传输协议的存在,如TCP或UDP) 3 ...

  8. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  9. hadoop rpc基础

    第一部分: hadoop rpc基础 RPC,远程程序调用,分布式计算中C/S模型的一个应用实例. 同其他RPC框架一样,Hadoop分为四个部分: 序列化层:支持多种框架实现序列化与反序列化 函数调 ...

随机推荐

  1. Saving James Bond(dijk)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1245 Saving James Bond Time Limit: 6000/3000 MS (Java ...

  2. android仿漫画源码、抽奖转盘、Google相册、动画源码等

    Android精选源码 android实现仿今日头条的开源项目 波浪效果,实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差 ...

  3. JFinal极速开发框架使用笔记(二) 两个问题,一个发现

    最近给新人出了一个小测试,我也用JFinal框架做了一下,记录一下使用过程中遇到的坑和新学到的知识点 首先是遇到的两个小问题, 一个是用最新版的eclipse运行JFinal的maven项目报错,经过 ...

  4. c++(hash表)

    hash表,有时候也被称为散列表.个人认为,hash表是介于链表和二叉树之间的一种中间结构.链表使用十分方便,但是数据查找十分麻烦:二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果.hash ...

  5. POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

    1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...

  6. 启动时候报错由于没有扫包 error creating bean with name

    <!-- 扫描包,加载service实现类 --> <context:component-scan base-package="com.taotao.search.serv ...

  7. [国嵌攻略][174][CGI快速入门-网页控制LED]

    CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...

  8. 本地访问服务器上的wamp

    一,httpd-vhosts.conf文件           # Virtual Hosts #     ServerName localhost     DocumentRoot D:/wamp/ ...

  9. pthread_cond_wait的spurious wakeup问题

    最近在温习pthread的时候,忽然发现以前对pthread_cond_wait的了解太肤浅了.昨晚在看<Programming With POSIX Threads>的时候,看到了pth ...

  10. Fragment禁止预加载

    项目中经常会用到ViewPager+Fragment组合,然而,有一个很让人头疼的问题就是,去加载数据的时候由于ViewPager的内部机制所限制,所以它会默认至少预加载一个. 1.既然说是ViewP ...