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提交作业这个最简单的客户端服务 ...
随机推荐
- 对 web.config 节点信息进行加密
记录一下,免得以后再网上找 项目中,数据库访问链接字符串配置在web.config中,明文的,应客户需求需改成密文,so,需要加密. 一开始想的是需要重写configuration什么什么的,最后发现 ...
- tomcat集群实例重复执行
http://www.cnblogs.com/interdrp/p/3458882.html
- EasyUI DataGrid getChecked/getSelections 获取不到数据
今天使用getChecked获取选择的行,结果总是获取一行数据,于是换用getSelections,结果还是一样,想起之前做的项目,把idField换了下,之后getChecked/getSelect ...
- php生成网页桌面快捷方式
本文将介绍使用PHP生成网页桌面快捷方式的代码,并添加图标及解决不同浏览器保存出现的乱码问题. 我们访问网站时,如果网站的内容很有吸引,一般我们都会使用浏览器的收藏夹功能,收藏此网站. 在浏览器收藏的 ...
- JS-身份证号获取出生日期、性别、年龄
var cardId=$("#cardId").val();//先获取身份证号(据自己实际写法获取) 1.获取出生日期: function getBirth(cardId){ va ...
- 【Java学习笔记】foreach语句(高级for)
package p2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java ...
- 【转】Beanstalkd 队列简易使用
Beanstalkd一个高性能分布式内存队列系统 之前在微博上调查过大家正在使用的分布式内存队列系统,反馈有Memcacheq,Fqueue, RabbitMQ, Beanstalkd以及link ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- zTree+EasyUi做权限遇到的小问题
最近需要做一个zTree+EasyUi的权限管理系统,以前有过接触,在做这一块时,用到了ztree,树来加载咱们的菜单栏,后台获取登录用户信息的权限列表,转换成json对象来加载到咱们的树当中,代码如 ...
- 使用xtrabackup备份mysql数据库
数据在一个企业里非常重要,因此经常需要备份数据库,确保出线故障时,可以立刻恢复数据到最新状态,目前常见的备份工具有mysqldump和xtrabackup,数据量较少时可以使用mysqldump,但随 ...