Hadoop:RPC通信实验

1.什么是Hadoop的RPC

Remote Procedure Call(简称:RPC):远程过程调用协议。
RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP, 为通信程序之间携带信息数据。
在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC使得开发包括网络分布式程序在内的应用程序更加容易。

2.创建一个客户端Client机

在关机状态下,左键Hadoop01虚拟机-管理-克隆-下一步-下一步-选择创建完整克隆,下一步在这里插入图片描述
-完成

3.Client虚拟机配置

打开Client虚拟机,打开命令行

su

输入密码

进行主机名的修改

vi /etc/sysconfig/network

改为

NETWORKING=yes
HOSTNAME=client

进行网卡的设置:

右键右上角网络连接图表-Edit Conections-选中Auto eth1-Edit
在这里插入图片描述
-Apply,输入密码进行授权
检查配置网卡是否成功

ping 192.168.100.10
reboot

进行重启

4.进行RPC实验

4.1在服务器端(NameNode节点)创建一个协议接口

在一号机命令行中:

su
输入密码
cd /usr/eclipse/
./eclipse 

选择此路径下的Workspace:/root/workspace
可看到之前创建的Hadoop项目(见上篇文章)

右键hadoop项目-New-Interface
Package包名填为rpc
Name填为ClientProtocol
点Finish
在其中写入:

package rpc;

public interface ClientProtocol {
	public final static  long versionID = 123123l;
	public String findMetaDataByName(String filename);
}

4.2创建一个通信服务端

将1号虚拟机,即NameNode节点作为服务端,声明一个RPCServer_NameNode类
该类需要实现ClientProtocol接口中的方法

右键rpc包-New-Class
Name填RPCServer_NameNode
勾选main方法,点Add,添加自己建的rpc的类
在这里插入图片描述
-OK-Finish
写入:

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_NameNode implements ClientProtocol {

	@Override
	public String findMetaDataByName(String filename) {
		// TODO Auto-generated method stub
		System.out.println("正在从内存中找"+filename+"的元数据信息");
		// return到客户端Client
		return filename+"找到后元数据信息";
		
	}

	public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
		// TODO Auto-generated method stub
		Server server = new RPC.Builder(new Configuration())
				.setInstance(new RPCServer_NameNode()).setProtocol(ClientProtocol.class).setBindAddress("192.168.100.10")
				.setPort(9123).build();
		server.start();

	}

}

4.3创建一个通信客户端

进入Client端虚拟机命令行:

su
输入密码
cd /usr/eclipse/
./eclipse 

选择此路径下的Workspace:/root/workspace
可看到之前创建的Hadoop项目

右键hadoop项目-New-Interface
Package包名填为rpc
Name填为RPCClient_HDFSClient
勾选main方法
点Finish

回到服务器端(一号机):

su
输入密码

将服务器端的 接口类ClientProtocol 发送给客户端的rpc工程:

cd
scp /root/workspace/hadoop/src/rpc/ClientProtocol.java root@192.168.100.14:/root/workspace/hadoop/src/rpc/

再回到客户端(Client):
刷新项目可看到传输过来了接口类ClientProtocol

在RPCClient_HDFSClient.java中写入:

package rpc;

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

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

public class RPCClient_HDFSClient {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		ClientProtocol cp = RPC.getProxy(ClientProtocol.class, 123123,
				new InetSocketAddress("192.168.100.10",9123),new Configuration());
		String msg = cp.findMetaDataByName("/words.txt");
		System.out.println(msg);
		RPC.stopProxy(cp);

	}

}

5.进行测试

开启服务器端,开启服务器端的监听进程,等待客户端发消息
回到服务器端(一号机):
鼠标点到main方法中
Run As-1 Java Application
在这里插入图片描述
保持启动状态
回到客户端Client:
鼠标点到main方法中
Run As-1 Java Application
在这里插入图片描述
可看到控制台显示服务器端返回的信息

在这里插入图片描述
服务器端调用成功
返回的信息是因为服务器端的此语句:

// return到客户端Client
		return filename+"找到后元数据信息";

这就是通过网络做了一个CS结构的远程过程调用

分布式系统都是基于RPC通信的机制来进行消息的传输(远程方法的调用)

回到服务器端(一号机):
可看到控制台显示信息
在这里插入图片描述
实验结束,点红色按钮关闭服务器端
在这里插入图片描述
便可以关闭虚拟机

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值