基于hadoop2.7.2 api代码简单模拟rpc通信

本文通俗易懂.

rpc是远程或者跨进程调用方法或传输信息的一种通信,基本过程是Client通过RPC.getProtocolProxy()获取代理类ProtocolProxy然后调用Server,在Server端调用的方法运行,并讲Server的运行结果返回给Client;

不多说下面开始代码演示,首先在eclipse中建立项目,加入hadoop中基本的jar包,这里为了方便我是使用的eclipse-hadoop插件,具体方法参考本人另一篇文章,创建了M-R project,没有手工导入jar

首先编写server类,实现server中的一个方法,在实例化server时候配置server的地址(ip+port)等信息,注意这个ip地址为Server端的地址

package rpc;
import java.io.IOException;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;

public class RpcServer implements Bizable {

	public String sysHi(String name) {
		return "Hi~" + name;
	}
	public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
		Configuration conf = new Configuration();
		Server server = new RPC.Builder(conf).setProtocol(Bizable.class).setInstance(new RpcServer())
				.setBindAddress("192.168.2.10").setPort(9527).build();
		server.start();
	}
}

由于client调用使用了代理模式,需要Server的一个接口,这里创建接口如下

package rpc;

public interface Bizable {

	public static final long versionID = 1L;
	public String sysHi(String name);
	
}
接下来开始编写client类,通过RPC工厂创建Server的代理类ProtocolProxy类,使用getProxy()获取实例对象,然后调用Server的sysHi()方法,在实例化过程中已经讲Server的ip,port等信息填好了

package rpc;

import java.io.IOException;
import java.net.InetSocketAddress;

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

public class RpcClient {

	public static void main(String[] args) throws IOException {
		ProtocolProxy<Bizable> proxy = RPC.getProtocolProxy(Bizable.class, 1L, new InetSocketAddress("192.168.2.10",9527), new Configuration());
		String result =  proxy.getProxy().sysHi("tomcat");
		System.out.println(result);
	}
}

可以在eclipse上调试运行,为了完全模拟,这里讲做好的代码打包为jar文件,并讲Server类的jar传到另外一个虚拟机中,用于真机模拟,注意配置的ip为虚拟机的ip,打包方法如下

项目右击export然后选择jar为runable jar下一步,如下图选择

将导出的jar文件copy到虚拟机,由于我主机系统就是ubuntu,所以美食用传输工具

hadoop@hadoop:~$ ls
bahsrc.bak  Downloads          Pictures       test.java   zookeeper.out
conf        examples.desktop   Public         Videos
Desktop     fairscheduler.xml  rpcServer.jar  workspace
Documents   Music              Templates      Workspaces
hadoop@hadoop:~$ scp rpcServer.jar hadoop1:/home/hadoop/
rpcServer.jar                                100%   46MB  11.5MB/s   00:04 

同样以类似方法导出client的jar文件,注意选择的Launch configuration为RpcClient的类,如下图

然后在虚拟机中启动server

hadoop@hadoop:hadoop-2.7.2$ ssh hadoop1
Last login: Sat May 21 13:55:01 2016 from hadoop
[hadoop@hadoop1 ~]$ ls
rpcServer.jar  zookeeper.out
[hadoop@hadoop1 ~]$ java -jar rpcServer.jar
log4j:WARN No appenders could be found for logger (org.apache.hadoop.ipc.Server).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

然后在本机运行client,就可以看到成功运行了Server中的sys()方法并获取到了结果

hadoop@hadoop:~$ java -jar rpcClient.jar 
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 http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hi~tomcat
hadoop@hadoop:~$ 

如果不运行Server,Client是不可能得到结果,一直处于等待状态

到此,模拟结束


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值