Remote Procedure Call(简称RPC):远程过程调用协议

1. 通过网络从远程计算机程序上请求服务

2. 不需要了解底层网络技术的协议(假定某些传输协议的存在,如TCP或UDP)

3. 采用客户机/服务机模式

请求程序就是一个客户机,服务提供程序就是一个服务器

例子:hadoop RPC机制的一个简单实现

1.导jar包,/share/hadoop/common 的相关的jar包 以及/share/hadoop/hdfs 相关的jar包

2.编程实现

1). 定义一个协议接口 如 Isay 接口

 public interface Isay {

    public static final long versionID=1234L;//前后一致

    public String say(String username);
}

2). 创建通信的服务端 (服务程序实现协议接口)

public class SayRpcServer implements Isay{

    //实现Isay接口
@Override
public String say(String username) {
// TODO Auto-generated method stub
System.out.println("server received data->["+username+"]");
return "Hello! ["+username+"]";
} public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
Configuration conf = new Configuration();
//创建builder对象
Builder builder = new RPC.Builder(conf);
//为builder设置服务对象,服务端地址,端口,定义代理协议
builder.setInstance(new SayRpcServer()).setBindAddress("Master").setPort(8001).setProtocol(Isay.class);
//创建 server
Server server = builder.build();
//启动 server
server.start();
System.out.println("server started");
} }

3).创建一个通信客户端

public class SayRpcClient {
private static Scanner sc; public static void main(String[] args) throws IOException { InetSocketAddress inetSocketAddress=new InetSocketAddress("Master", 8001);
Configuration conf=new Configuration();
//初始化 RPC 代理
Isay proxySay=RPC.getProxy(Isay.class, 1234L, inetSocketAddress, conf); System.out.println("请输入用户名(quit退出)");
//从控制台读入数据
sc=new Scanner(System.in);
while(sc.hasNext()) {
String userName=sc.next();
if("quit".equals(userName)) {//设定退出条件
System.out.println("RPC client exited");
return ;
}
String s=proxySay.say(userName);//远程调用
System.out.println(s);
System.out.println("请再输入姓名(quit退出)");
}
}
}

4)输出结果

1.启动服务端

server started

2.启动客户端

请输入用户名(quit退出)
Jack
Hello! [Jack]
请再输入姓名(quit退出)
Mark
Hello! [Mark]
请再输入姓名(quit退出)
quit
RPC client exited

同时server的输出结果

server started
server received data->[Jack]
server received data->[Mark]

Hadoop RPC通信的更多相关文章

  1. Hadoop的RPC通信原理

    RPC调用: RPC(remote procedure call)远程过程调用: 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称为客户端(client): server端 ...

  2. 吴裕雄--天生自然HADOOP操作实验学习笔记:分布式及RPC通信简介

    实验目的 掌握GOF设计模式的代理模式 了解掌握socket编程.java反射.动态代理 了解NIO.多线程 掌握hadoop的RPC框架使用API 实验原理 1.什么是RPC 在hadoop出现以前 ...

  3. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  4. Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  5. 【Hadoop代码笔记】通过JobClient对Jobtracker的调用详细了解Hadoop RPC

    Hadoop的各个服务间,客户端和服务间的交互采用RPC方式.关于这种机制介绍的资源很多,也不难理解,这里不做背景介绍.只是尝试从Jobclient向JobTracker提交作业这个最简单的客户端服务 ...

  6. Hadoop RPC源码阅读-交互协议

    Hadoop版本Hadoop2.6 RPC主要分为3个部分:(1)交互协议(2)客户端 (3)服务端 (1)交互协议 协议:把某些接口和接口中的方法称为协议,客户端和服务端只要实现这些接口中的方法就可 ...

  7. 每天收获一点点------Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  8. Hadoop RPC简单例子

    jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: ( ...

  9. Hadoop RPC源码分析

    Hadoop RPC源码分析 上一篇文章http://www.cnblogs.com/dycg/p/rpc.html 讲了Hadoop RPC的使用方法,这一次我们从demo中一层层进行分析. RPC ...

随机推荐

  1. python3 调用 centos 常用系统命令

    一.创建目录 1 import os 2 3 base_path = '/data/sw_backup' 4 addr= 'FT' 5 ip='192.168.1.1' 6 path = base_p ...

  2. Java测试开发--Java基础知识(二)

    一.java中8大基本类型 数值类型:byte.short.int .float.double .long 字符类型:char 布尔类型:boolean 二. 封装:将属性私有化,不允许外部数据直接访 ...

  3. JMeter跨线程组保持登录(多线程组共享cookie)

    使用__setProperty设置全局变量: 1.jmeter中创建一个登录请求,然后执行,察看结果树-->查看返回cookie信息,我的是在Response data中的 Response h ...

  4. idea Mark Directory as 的几种文件类型

    1. Source roots (or source folders) 源文件夹 通过为该类别分配文件夹,可以告诉IntelliJ IDEA该文件夹及其子文件夹包含应在构建过程中进行编译的源代码. 2 ...

  5. go的常用数据类型-持续优化篇

    p.p1 { margin: 0; font: 12px "Helvetica Neue"; color: rgba(69, 69, 69, 1) } p.p2 { margin: ...

  6. POI 4.0 读取Excel

    ... package POIXLS; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; ...

  7. 【Microsoft Azure 的1024种玩法】一.一分钟快速上手搭建宝塔管理面板

    简介 宝塔Linux面板是提升运维效率的服务器管理软件,其支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能.今天带大家一起学习的内容为一分钟快速上手搭建 ...

  8. [luogu4466]和与积

    令$d=\gcd(i,j)$,$i'=\frac{i}{d}$,$j'=\frac{j}{d}$,则$(i',j')=1$,可得$(i'+j',i'j')=1$(假设有公因子$p$,必然有$p|i'或 ...

  9. 调试:'Object reference note set to an instance of an object.'

    今天调试代码遇到一个奇怪的问题,每次调试到 var files = new List<string>()这一行代码,总是报错:System.NullReferenceException: ...

  10. git新手配置(ios环境)

    ios环境,初步了解git是个什么东西,使用过svn相关软件最佳,否则可以先补一下git的相关概念和用处,相关教程:https://www.liaoxuefeng.com/wiki/896043488 ...