Hadoop之——RPC通信实例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45922715

一、 RPC(remote procedure call)

不同java进程间的对象方法的调用。

一方称作服务端(server),一方称作客户端(client)。

server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端。

RPC是hadoop框架运行的基础。

二、通过rpc小例子获得的认识

1.服务端提供的对象必须是一个接口,接口extends VersioinedProtocal

2.客户端能够的对象中的方法必须位于对象的接口中。

三、RPC实例

1、创建MyBiz接口,此接口继承hadoop中的VersionedProtocol接口

package com.lyz.hadoop.rpc;

import org.apache.hadoop.ipc.VersionedProtocol;

/**
 * 设置代理对象的返回值必须为接口类型
 * 此接口用于接收RPC客户端创建代理对象的返回值
 * @author liuyazhuang
 *
 */
public interface MyBiz extends VersionedProtocol{
	/**
	 * 定义的接口
	 * @param name
	 * @return
	 */
	public String hello(String name);
	/**
	 * 版本号
	 */
	long VERSION = 1001;

}

2、创建MyBiz接口的实现类MyBizImpl

package com.lyz.hadoop.rpc;

import java.io.IOException;

/**
 * MyBiz接口的实现类
 * @author liuyazhuang
 *
 */
public class MyBizImpl implements MyBiz {

	@Override
	public long getProtocolVersion(String protocol, long clientVersion)
			throws IOException {
		return MyBiz.VERSION;
	}

	@Override
	public String hello(String name){
		System.out.println("服务端被调用了");
		return "hello "+name;
	}
}

3、创建RPC服务端

package com.lyz.hadoop.rpc;

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

/**
 * RPC服务端
 * @author liuyazhuang
 *
 */
public class MyServer {
	public static final String SERVER_ADDRESS = "localhost";
    public static final int SERVER_PORT = 12345;
	public static void main(String[] args) throws Exception {
		/**
		 * 构造一个rpc server
		 * @param instance:实例中的方法会被客户端调用
		 * @param bindAddress:绑定的地址用于监听连接
		 * @param port:绑定的端口用于监听连接
		 * @param conf:the Configuration to use
		 */
		Server server = RPC.getServer(new MyBizImpl(), SERVER_ADDRESS, SERVER_PORT, new Configuration());
		server.start();
	}
}

4、创建RPC客户端

package com.lyz.hadoop.rpc;

import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

/**
 * RPC客户端
 * @author liuyazhuang
 *
 */
public class MyClient {
	public static void main(String[] args) throws Exception {
		MyBiz proxy = (MyBiz) RPC.waitForProxy(MyBiz.class,
				MyBiz.VERSION,
				new InetSocketAddress(MyServer.SERVER_ADDRESS, MyServer.SERVER_PORT),
				new Configuration());
		String result = proxy.hello("world");
		System.out.println("客户端的调用结果为:"+result);
		RPC.stopProxy(proxy);
	}
}

5、 注意:下图中1和2位置处的版本号必须相同

时间: 2024-10-11 05:43:09

Hadoop之——RPC通信实例的相关文章

Hadoop源码解析之 rpc通信 client到server通信

rpc是Hadoop分布式底层通信的基础,无论是client和namenode,namenode和datanode,以及yarn新框架之间的通信模式等等都是采用的rpc方式. 下面我们来概要分析一下Hadoop2的rpc. Hadoop通信模式主要是C/S方式,及客户端和服务端的模式. 客户端采用传统的socket通信方式向服务端发送信息,并等待服务端的返回. 服务端采用reactor的模式(Java nio)的方式来处理客户端的请求并给予响应. 一.客户端到服务端的通信 下面我们先分析客户端到

Hadoop RPC通信Client客户端的流程分析

Hadoop的RPC的通信与其他系统的RPC通信不太一样,作者针对Hadoop的使用特点,专门的设计了一套RPC框架,这套框架个人感觉还是有点小复杂的.所以我打算分成Client客户端和Server服务端2个模块做分析.如果你对RPC的整套流程已经非常了解的前提下,对于Hadoop的RPC,你也一定可以非常迅速的了解的.OK,下面切入正题. Hadoop的RPC的相关代码都在org.apache.hadoop.ipc的包下,首先RPC的通信必须遵守许多的协议,其中最最基本的协议即使如下: /**

3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo

hadoop中的RPC框架实现机制 RPC是Remotr Process Call, 进程间的远程过程调用,不是在一个jvm里. 即,Controller拿不到Service的实例对象. hadoop中的RPC应用实例demo 在windows是调用端,在linux里是服务端. 在这里,需要LoginServiceinterface.java 停止 出错误了,很明显. 这是个很好的思考题?

Hadoop学习<四>--HDFS的RPC通信原理总结

这里先写下自己学习RPC的笔记总结,下面将详细介绍学习过程: RPC(remote procedure call) 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称作客户端(client). server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端. RPC是hadoop框架运行的基础. 通过rpc小例子获得的认识? 1. 服务端提供的对象必须是一个接口,接口extends VersioinedProtocal 2. 客户端能够的对象中的方

Hadoop rpc通信

rpc是Hadoop分布式底层通信的基础,无论是client和namenode,namenode和datanode,以及yarn新框架之间的通信模式等等都是采用的rpc方式. 下面我们来概要分析一下Hadoop2的rpc. Hadoop通信模式主要是C/S方式,及客户端和服务端的模式. 客户端采用传统的socket通信方式向服务端发送信息,并等待服务端的返回. 服务端采用reactor的模式(Java nio)的方式来处理客户端的请求并给予响应. 一.客户端到服务端的通信 下面我们先分析客户端到

Hadoop RPC简单实例

1.导入Hadoop-Common-2.6.0.jar导入工程,里面的IPC实现RPC需要的文件. 2.服务器端 (1)服务接口 package com.neu.rpc.server; /** * Created by apple on 16/6/26. */ public interface LoginServiceInterface { public static final long versionID = 1L; public String login(String username,

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See

Hadoop 自定义RPC protocol

RPC的全称为远程过程调用.由于Hadoop是一个分布式系统,因此底层的通信库也就必须实现RPC的基础功能.Hadoop RPC 在整个hadoop中扮演着底层通信模块的角色,举例而言NN和DN.AM和RM之间的通信和协调都是Hadoop RPC来完成的.熟悉使用Hadoop RPC可以加深我们对Hadoop各个模块之间通信过程的理解,也能让我们实现一些自己想要的分布式的小功能. 很多Hadoop相关书籍中都详细介绍了Hadoop RPC,其具体原理大家有兴趣的话可以去看源码加深理解.不过,我觉

RPC通信功能实现

Table of Contents RPC通信功能实现 配置参数 调用方法 RPC通信功能实现 HBase的RPC通信功能主要基于Protobuf和NIO这两个组件来实现,在通信管道上选择的是protobuf对外声明的BlockingRpcChannel(阻塞式),其callBlockingMethod方法决定了客户端与服务端的交互行为,比如采用什么样的方法进行通信以及通信报文的格式规则都是通过该方法来描述的. HBase对外声明了BlockingRpcChannelImplementation