第一部分: hadoop rpc基础

RPC,远程程序调用,分布式计算中C/S模型的一个应用实例。

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

  • 序列化层:支持多种框架实现序列化与反序列化
  • 函数调用层:利用java反射与动态代理实现
  • 网络传输层:基于TCP/IP的Socket机制
  • 服务的处理框架:基于Reactor模式的事件驱动IO模型

Hadoop RPC主要对外提供2种接口

public static ProtocolProxy getProxy/waitForProxy:

构造一个客户端代理对象,向服务器发送RPC请求

public static Server RPC.Builder(Configuration).build(…):

为某个协议实例构造一个服务器对象,用于处理客户端发送请求。

如何使用Hadoop RPC?

其实很简单,按照下面四步即可完成高性能CS网络模型

1.定义RPC协议

2.实现RPC协议

3.构造和启动RPC SERVER

4.构造RPC Client并发送请求

下面是代码实例, 依赖hadoop-common-版本.jar

1.定义RPC协议

hadoop中所有自定义RPC接口都必须继承VersionedProtocol接口

package myrpc;

import org.apache.hadoop.ipc.VersionedProtocol;

/**

* Created by ywszjut on 14-8-22.

*/

public interface ClientProtocol extends VersionedProtocol {

public static final long versionID=1L;

String echo(String value);

}

2.实现协议

package myrpc;

import org.apache.hadoop.ipc.ProtocolSignature;

import java.io.IOException;

/**

* Created by ywszjut on 14-8-22.

*/

public class ClientProtocolImpl implements ClientProtocol {

@Override

public String echo(String value) {

return "hello "+value;

}

@Override

public long getProtocolVersion(String s, long l) throws IOException {

return ClientProtocol.versionID;

}

@Override

public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {

return new ProtocolSignature(ClientProtocol.versionID,null);

}

}

3.构造和启动RPC SERVER

package myrpc;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import org.apache.hadoop.ipc.RPC.Server;

import java.io.IOException;

/**

* Created by ywszjut on 14-8-22.

*/

public class MyRpcServer {

public static void main(String[] args) throws IOException {

Server server = new RPC.Builder(new Configuration()).setProtocol(ClientProtocol.class)

.setInstance(new ClientProtocolImpl()).setBindAddress("127.0.0.1").setPort(8787)

.setNumHandlers(5).build();

server.start();

}

}

4.构造客户端并发送请求

package myrpc;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import java.io.IOException;

import java.net.InetSocketAddress;

/**

* Hello world!

*/

public class Client {

public static void main(String[] args) throws IOException {

ClientProtocol proxy = (ClientProtocol) RPC.getProxy(ClientProtocol.class,ClientProtocol.versionID,new InetSocketAddress("127.0.0.1",8787),new Configuration());

String result = proxy.echo("123");

System.out.println(result);

}

}

测试的时候,先启动3,再启动4,你会发现控制台打出了hello 123

好,既然hello world 搞完, 开始学习RPC类的具体实现

hadoop rpc基础的更多相关文章

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

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

  2. Hadoop RPC机制的使用

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

  3. Apache Hadoop RPC Authentication 安全绕过漏洞

    漏洞名称: Apache Hadoop RPC Authentication 安全绕过漏洞 CNNVD编号: CNNVD-201308-425 发布时间: 2013-08-28 更新时间: 2013- ...

  4. 每天收获一点点------Hadoop RPC机制的使用

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

  5. Hadoop RPC

    hadoop rpc机制 && 将avro引入hadoop rpc机制初探 1 RPC RPC(Remote Procedure Call)--远程过程调用,它是一种通过网络从远程计算 ...

  6. Hadoop RPC实例

    本文发表于本人博客. 上次写了个hadoop伪分布环境搭建的笔记了,今天来说下hadoop分布式构建的基础RPC,这个RPC在提交Job任务的时候底层就是创建了RPC来实现远程过程调用服务端. 我们首 ...

  7. Hadoop RPC机制详解

    网络通信模块是分布式系统中最底层的模块,他直接支撑了上层分布式环境下复杂的进程间通信逻辑,是所有分布式系统的基础.远程过程调用(RPC)是一种常用的分布式网络通信协议,他允许运行于一台计算机的程序调用 ...

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

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

  9. 【Hadoop代码笔记】通过JobClient对Jobtracker的调用详细了解Hadoop RPC

    Hadoop的各个服务间,客户端和服务间的交互采用RPC方式.关于这种机制介绍的资源很多,也不难理解,这里不做背景介绍.只是尝试从Jobclient向JobTracker提交作业这个最简单的客户端服务 ...

随机推荐

  1. TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst

    通过 ISuperObject.GetEnumerator 可获取一个 TSuperEnumerator 对象. TSuperEnumerator 主要有: MoveNext 方法.Current 属 ...

  2. Daily Scrum 12.14

    今日完成任务: 优化了问题页面显示问题的算法:两名开发人员有CCF考试,今天没有完成任务,任务顺延到明天. 明日任务: 黎柱金 解决资源显示全部为同一个PDF的BUG 晏旭瑞 资源搜索问题 孙思权 做 ...

  3. 用jquery编写的分页插件

    用jquery编写的分页插件 源码 function _pager_go(total_page) { var page_str = $("#_pager_textbox").val ...

  4. photoshopcc基础教程

    web项目中,除了最基础的用java存取数据外,还有重要的h5+css排版以及图片的ps,排版多多看网上人家的好看的界面设计,至于图片,只能自己上手了,设计最终的目的是好看,好看,好看. 接下来,做个 ...

  5. 《CODE》读后笔记——第14~20章

    14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...

  6. css3之多列

                                             

  7. 字符串流stringstream(头文件sstream)

    今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...

  8. 利用CSS3实现圆角的outline效果的教程

    一.首先,outline是个很牛的东西1. border近亲outline和border是近亲,为什么这么讲呢?首先,都是给元素外面套框框的:其次,支持的属性值几乎都是一样的,例如,outline-s ...

  9. 不常用的toLocaleString()方法

    在javascript中所有的对象都具有toLocaleString().toString()和valueOf()方法. 其中,很多情况调用toString()和valueOf方法会返回相同的值,但是 ...

  10. Connecting sql server2008 through C#

    本实例只在于将通过ASP.NET上的控件(如button.textbox等)结合C#中类的应用,将自己需要的数据存入当地的SQL SERVER数据库中 首先我们在项目中需要建立一个ASP.NET We ...