hadoop rpc基础
2015-11-24 22:27
288 查看
第一部分: 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接口
2.实现协议
3.构造和启动RPC SERVER
4.构造客户端并发送请求
测试的时候,先启动3,再启动4,你会发现控制台打出了hello 123
好,既然hello world 搞完, 开始学习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); } |
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); } } |
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(); } } |
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); } } |
好,既然hello world 搞完, 开始学习RPC类的具体实现
相关文章推荐
- Linux socat命令
- 中午游泳很海皮-linux&php
- Linux下安装g++编译器心得
- [Linux] Enable ssh key authentication from one user on client to multiple users on server
- openfire源码分析---6
- [hadoop in Action] 第3章 Hadoop组件
- Linux 非缓冲I/O与缓冲I/O
- Linux V4L2驱动架构解析与开发导引
- tomcat 配置文件server.xml详解
- Hadoop - 实时查询Drill
- xshell连接本地虚拟机的步骤
- V4L2驱动程序架构
- Centos的管理工具---Security_FX 中文乱码处理
- tomcat 多实例部署
- awk学习
- shell脚本打印日志方法
- CentOS Linux 监控安装之cacti
- C#中判断系统的架构(32位,还是64位)
- Linux Bash 字符串/布尔/文件操作符
- linux文件按最新时间排序