我是靠谱客的博主 自然可乐,最近开发中收集的这篇文章主要介绍HDFS各个节点间的通信协议-RPC解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景:使用Java IDE访问服务器的时候对节点之间的相互通信一头雾水,客户端是如何传递数据给服务端,服务端又是怎样向客户端返回结果的。mark下RPC做个学习记录。

百科下RPC的概念

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

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

服务端方法接口
import org.apache.hadoop.ipc.VersionedProtocol;

public interface MyBusiness extends VersionedProtocol {

	//定义ID号
	//定义一个签名,通过这个ID,就能区分在客户端调用的时候,具体调用哪个实现
	//要求:名称必须叫versionID
	public static long versionID = 1l;
	
	
	//定义自己的方法
	public String sayHello(String name);
}

服务端方法实现

import java.io.IOException;

import org.apache.hadoop.ipc.ProtocolSignature;

public class MyBusinessImpl implements MyBusiness {

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

	@Override
	public ProtocolSignature getProtocolSignature(String arg0, long arg1, int arg2) throws IOException {
		// 通过ID构造一个签名
		return new ProtocolSignature(MyBusiness.versionID,null);
	}

	@Override
	public long getProtocolVersion(String arg0, long arg1) throws IOException {
		//直接返回ID
		return MyBusiness.versionID;
	}

	

}
服务端
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 MyRPCServer {

	public static void main(String[] args) throws Exception {
		// 创建一个Hadoop的RPC Server,并把我们的程序部署上来
		
		RPC.Builder builder = new RPC.Builder(new Configuration());
		builder.setBindAddress("localhost");//设置Server的地址
		builder.setPort(7788);// Server运行的端口
		
		//将自己的程序部署到RPC Server上
		builder.setProtocol(MyBusiness.class);
		//将接口的实现部署上来
		builder.setInstance(new MyBusinessImpl());//是真正对象
		
		//通过Builder创建一个RPC Server
		Server server =  builder.build();
		
		//启动Server
		server.start();
	}

}

客户端

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

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

import demo.rpc.server.MyBusiness;

public class MyRPCClient {

	public static void main(String[] args) throws Exception {
		// 创建一个RPC的客户端,调用Server的功能
		//通过RPC调用Server端的功能,拿到是一个代理对象

		MyBusiness proxy = RPC.getProxy(MyBusiness.class,          //在服务器部署的接口 
				                        MyBusiness.versionID,     //在服务器端部署的ID号
				                        new InetSocketAddress("localhost", 7788),  //服务器端的地址
				                         new Configuration());
		
		//通过proxy的代理对象去调用服务器端的功能
		System.out.println(proxy.sayHello("Tom"));
	}

}

最后

以上就是自然可乐为你收集整理的HDFS各个节点间的通信协议-RPC解析的全部内容,希望文章能够帮你解决HDFS各个节点间的通信协议-RPC解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部