hadoop rpc基础
第一部分: 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基础的更多相关文章
- Hadoop学习笔记—3.Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
- Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
- Apache Hadoop RPC Authentication 安全绕过漏洞
漏洞名称: Apache Hadoop RPC Authentication 安全绕过漏洞 CNNVD编号: CNNVD-201308-425 发布时间: 2013-08-28 更新时间: 2013- ...
- 每天收获一点点------Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
- Hadoop RPC
hadoop rpc机制 && 将avro引入hadoop rpc机制初探 1 RPC RPC(Remote Procedure Call)--远程过程调用,它是一种通过网络从远程计算 ...
- Hadoop RPC实例
本文发表于本人博客. 上次写了个hadoop伪分布环境搭建的笔记了,今天来说下hadoop分布式构建的基础RPC,这个RPC在提交Job任务的时候底层就是创建了RPC来实现远程过程调用服务端. 我们首 ...
- Hadoop RPC机制详解
网络通信模块是分布式系统中最底层的模块,他直接支撑了上层分布式环境下复杂的进程间通信逻辑,是所有分布式系统的基础.远程过程调用(RPC)是一种常用的分布式网络通信协议,他允许运行于一台计算机的程序调用 ...
- Hadoop系列番外篇之一文搞懂Hadoop RPC框架及细节实现
@ 目录 Hadoop RPC 框架解析 1.Hadoop RPC框架概述 1.1 RPC框架特点 1.2 Hadoop RPC框架 2.Java基础知识回顾 2.1 Java反射机制与动态代理 2. ...
- 【Hadoop代码笔记】通过JobClient对Jobtracker的调用详细了解Hadoop RPC
Hadoop的各个服务间,客户端和服务间的交互采用RPC方式.关于这种机制介绍的资源很多,也不难理解,这里不做背景介绍.只是尝试从Jobclient向JobTracker提交作业这个最简单的客户端服务 ...
随机推荐
- 开始研究tigase和android客户端的实现
2015.7.5. 昨晚总算把tigaase7.0的开发环境搭起来了.稍微看了下代码结构. 主要是auth,db,compnent,cluster,server,xmpp,这几块,准备先发点时间看看开 ...
- opencv 处女作
显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的:namedWindow:显然,我们也可以看到这是用来命名窗口名称的 ...
- Cracking-- 17.13 将二叉树转换成双向链表
在书的105页 使用中根遍历的思想 left 之后 为 root 之后 为 right 则对左子树来说 left->right = root; root->left = left; 对右子 ...
- div 指令
div 指令 div 是除法指令,后面跟的是除数,被除数默认在 ax, 或者 dx.ax 组成的存储单元中. 除数可以有 8 位和 16 位两种,存储于一个 reg 或内存单元中,也就是说不可以 di ...
- Java 第17章 继承
继承的概念 继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基, 是提高软件系统的可扩展性与可维护性的主要途径. 所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类 ...
- codeIgniter 文件路径的问题
学习CI的时候,发现一个问题,求指点. 整个项目的头部文件共用,CSS.JS 等文件都一起引入.在以下路径下都没问题. 首页 -- http://localhost/citest/index ...
- flask_关注者,联系人和好友
在这节我们实现的功能比较复杂,就是实现用户"关注"和"取消关注"的功能. 一个用户可以关注多个其他的用户,一个用户也可以被其他多个用户所关注,这样看的话,在数据 ...
- 注意ArrayAdapter的Add()方法
ArrayAdapter类可以作为ListView等的适配器资源,并且可以动态向适配器中添加新的数据,这就是ArrayAdapter.Add()方法的作用.但是在使用该方法时如果出错,那就需要检查Ar ...
- 原生js-日历插件
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- vijos1909寻找道路
描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 ...