HADOOP-RPC机制
来源:互联网 发布:特效字幕制作软件 编辑:程序博客网 时间:2024/05/22 06:55
转载自
一、RPC基本概念:
1、RPC,即Remote Procdure Call,中文名:远程过程调用;
(1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的。因此,它经常用于分布式网络通信中。
(2)Hadoop的进程间交互都是通过RPC来进行的,比如Namenode与Datanode直接,Jobtracker与Tasktracker之间等。
因此,可以说:Hadoop的运行就是建立在RPC基础之上的。
补充:RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
2、RPC的显著特点
(1)透明性:远程调用其他机器上的程序,对用户来说就像是调用本地方法一样;
(2)高性能:RPC Server能够并发处理多个来自Client的请求;
(3)可控性:jdk中已经提供了一个RPC框架—RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架。
3、RPC的基本流程
(1)RPC采用了C/S的模式;
(2)Client端发送一个带有参数的请求信息到Server;
(3)Server接收到这个请求以后,根据发送过来的参数调用相应的程序,然后把自己计算好的结果发送给Client端;
(4)Client端接收到结果后继续运行;
4、 Hadoop中的RPC机制
同其他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的并发处理能力;
Hadoop RPC在整个Hadoop中应用非常广泛,Client、DataNode、NameNode之间的通讯全靠它了。例如:我们平时操作HDFS的时候,使用的是FileSystem类,它的内部有个DFSClient对象,这个对象负责与NameNode打交道。在运行时,DFSClient在本地创建一个NameNode的代理,然后就操作这个代理,这个代理就会通过网络,远程调用到NameNode的方法,也能返回值。
二、RPC使用:
1、创建接口,该接口类在服务端和客户端都必须有。接口必须继承VersionedProtocol
public interface Serverif extends VersionedProtocol
2、在服务端实现接口类
public class ServerImpl implements Serverif
3、服务端,使用实现的类启动服务,需要定义监听的IP地址和端口
Server server = RPC.getServer(si, SERVERADDRESS, SERVERPORT, 10, true, conf);
server.start();
4、客户端定义远程连接
InetSocketAddress sa = new InetSocketAddress(SERVERADDRESS, SERVERPORT);
5、客户端使用远程连接,通过接口定义,调用服务端具体实现
Serverif si = (Serverif) RPC.getProxy(Serverif.class, versionID, sa, conf);
return si.method(args);
三、实例:
1、接口
package rpc; import org.apache.hadoop.ipc.VersionedProtocol; public interface IMyBiz extends VersionedProtocol{ public Long VERSION = 123L; public String sayHello(String str); }
}2、实现:package rpc; import java.io.IOException; public class MyBiz implements IMyBiz { public String sayHello(String str) { return "hello"+str; } @Override public long getProtocolVersion(String s, long l) throws IOException { // TODO Auto-generated method stub return VERSION; } }
3、服务:package rpc; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Server; public class MyServer { public static final String HOSTNAME = "localhost"; public static final int PORT = 12345; /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Configuration con = new Configuration(); Server server = RPC.getServer(new MyBiz(), HOSTNAME, PORT, con); server.start(); } }
4、客户端:package rpc; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; public class MyClient { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { InetSocketAddress addr = new InetSocketAddress("localhost",12345); IMyBiz proxy = (IMyBiz)RPC.waitForProxy(IMyBiz.class, IMyBiz.VERSION, addr, new Configuration()); String str = proxy.sayHello("word"); System.out.println("客户端输出:"+str); RPC.stopProxy(proxy); } }
- Hadoop RPC机制
- Hadoop RPC机制
- hadoop IPC/RPC 机制
- Hadoop中RPC机制
- hadoop RPC 机制
- Hadoop的RPC机制
- Hadoop备战:RPC机制
- Hadoop RPC机制总结
- HADOOP-RPC机制
- hadoop的RPC机制
- HADOOP的RPC机制
- Hadoop RPC机制
- HADOOP-RPC机制
- Hadoop RPC机制
- Hadoop的RPC机制
- Hadoop RPC机制
- hadoop rpc机制 && 将avro引入hadoop rpc机制初探
- hadoop rpc机制 && 将avro引入hadoop rpc机制初探
- 如何给MFC添加背景图片
- 漫话中国古代史 —— 五代十国
- 1.微信开发
- Android中的权限系统
- Express4+Angularjs+Bootstrap3环境搭建
- HADOOP-RPC机制
- EasyUI小图标设置
- hdu 3613 扩展kmp求回文串
- Spring AOP 动态多数据源
- SSH框架入门(一)——Struts2基础及查错步骤
- list遍历
- [Genymotion] Unable to start the virtual device
- Java中级开发工程师知识点归纳
- luogg_java重新学习_第二章:基本语法01(概念)