分布式系统详解--框架(Hadoop--RPC协议)

                   分布式系统详解--框架(Hadoop--RPC协议)

       在之前的一篇文章当中已经写过一篇文章是关于RPC通信协议的文章,是    分布式系统详解--基础知识(通信)是讲的关于网络通信的最基本的知识。这篇文章也简单讲一下关于hadoop内部的网络通信。

一、hadoop的RPC模式

C/S模式

基于传输层模式。(TCP/IP)

事件处理模型。(请求、计算、协议)

二、RPC设计目的

调用非本机方法。

不同语言程序之间通讯。

不了解底层通讯,向本地方法一样调用。

三、RPC作用

分布式程序基础(分布式操作系统、分布式计算、分布式软件设计)

垂直应用服务化拆分。

四、RPC特点

封装网络交互

远程调用对象代理

支持容器(Spring、Jetty)

可配置,可扩展

五、hadoop 主要协议

NameNode主要实现了ClientProtocol、DataNodeProtocol、NameNodeProtocol。

Hadoop2.0中存在两个ipc包,分别在hadoop-common和hadoop-yarncommom项目下。分别是hadoop RPC和新的yarn RPC。

六、JAVA代码实现简单hadoop-RPC简单实现测试

6.1 协议接口

/**
 * 
 */
package com.yuyi.rpc;

/**
 * @author mcb 
 *
 * 2018年10月15日 上午11:08:02 
 * 	RPC中的协议
 */
public interface SayHello {
	
	public static final long versionID=1;
	//协议
	public String sayHello(String words);

}

6.2 服务端接口

/**
 * 
 */
package com.yuyi.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;

/**
 * @author mcb 
 *
 * 2018年10月15日 上午11:10:50 
 * 	RPC中的服务端 实现协议
 * 
 */
public class RPCServer implements SayHello{

	
	public String sayHello(String words) {
		// TODO 自动生成的方法存根
		System.out.println("客户端说的话是: "+words);
		
		return "OK~我知道你没有挂掉了~~~";
	}
	
	public static void main(String[] args) {
		
		try {
			Server server = new RPC.Builder(new Configuration())
			.setInstance(new RPCServer())
			.setProtocol(SayHello.class)
			.setBindAddress("127.0.0.1")
			.setPort(6666)
			.build();
			
			server.start();
			System.out.println("server is started... ");
			
		} catch (HadoopIllegalArgumentException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	}
	
	
	
}

6.3 客户端接口

/**
 * 
 */
package com.yuyi.rpc;

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

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

/**
 * @author mcb 
 *
 * 2018年10月15日 上午11:20:11 
 */

public class RPCClient {
	private static String sayHello;

	public static void main(String[] args) {
		//第一个参数:协议 第二份参数:版本(long整数),第三个参数:地址,第四个参数:configuration。
		try {
			while (true) {
			SayHello sayH = RPC.getProxy(SayHello.class, 1, new InetSocketAddress("127.0.0.1",6666), new Configuration());
			sayHello = sayH.sayHello("我现在活着,心跳正在进行~~~");
			System.out.println(sayHello);
			Thread.sleep(2000);
			}
			
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	}
	
}

启动后结果:

欢迎订阅公众号(JAVA和人工智能)

                                                                        获取更过免费书籍资源视频资料

                                            

知识点超级链接:

 1,分布式系统详解--基础知识(概论

 2,分布式系统详解--基础知识(线程)

 3,分布式系统详解--基础知识(通信)

 4,分布式系统详解--基础知识(CAP)

 5,分布式系统详解--基础知识(安全)

 6,分布式系统详解--基础知识(并发)

 7,分布式系统详解--架构简介(微服务)

 8,分布式系统详解--Linux(权限)

 9,分布式系统详解--框架(Hadoop-单机版搭建)

10,分布式系统详解--架构(Hadoop-克隆服务器)

11,分布式系统详解--框架(Hadoop-集群搭建)

12,分布式系统详解--框架(Hadoop-Ssh免密登陆配置)

13,分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)

14,分布式系统详解--框架(Hadoop--RPC协议)

猜你喜欢

转载自blog.csdn.net/mcb520wf/article/details/83054679