通信协议 远程调用RPC

news/2024/11/17 2:36:18/
1.通讯协议
所有的HDFS通讯协议都是建立在TCP/IP协议之上。
客户端通过一个可配置的TCP端口连接到Namenode,通过ClientProtocol协议与Namenode交
互。而Datanode使用DatanodeProtocol协议与Namenode交互。
一个远程过程调用(RPC)模型被抽象出来封装ClientProtocol和Datanodeprotocol协议。在
设计上,Namenode不会主动发起RPC,而是响应来自客户端或 Datanode 的RPC请求。
编写RPC
package com.nefu.rpc;public interface RPCprotocol {long versionID = 666;void mkdirs(String path);
}

这段代码定义了一个 Java 接口(interface)叫做 RPCprotocol,它主要用于描述一个远程过程调用(RPC)的协议。让我们逐行解释:

1.接口定义:


2.RPCprotocol 是一个接口,接口在 Java 中是一种规范,用于描述一组方法的集合,而不提供这些方法的具体实现。其他类可以实现这个接口,并提供方法的具体实现。


3.常量 versionID:


4.versionID 是一个接口中的常量,其值为 666。这个常量被用于标识协议的版本号。在某些情况下,这样的版本号可以用来确保通信的双方使用相同或兼容的协议版本。


5.抽象方法 mkdirs:


6.接口定义了一个抽象方法 mkdirs,该方法没有具体的实现。这个方法的目的是用于创建目录,接受一个字符串类型的参数 path,表示要创建的目录路径。

综合起来,这个接口定义了一个协议,规定了远程调用的版本号以及远程调用的方法。实际的使用场景需要有一个实现了这个接口的类,该类提供了 mkdirs 方法的具体实现。其他系统的组件可以通过这个接口调用 mkdirs 方法,实现在远程系统上创建目录的功能。例如,可以有一个服务器实现这个接口,并在客户端通过远程调用执行相应的操作。

package com.nefu.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.Server;import java.io.IOException;public class NamenodeServer implements RPCprotocol{public void mkdirs(String path){System.out.println("在服务端,创建路径" + path);}public static void main(String[] args) throws IOException{Server server = new RPC.Builder(new Configuration()) .setBindAddress("localhost") .setPort(9999) .setProtocol(RPCprotocol.class) .setInstance(new NamenodeServer()) .build();System.out.println("服务器开始工作 "); server.start(); }}

这段代码实现了一个简单的Hadoop RPC服务。让我们逐行解释:

1.导包语句:


2.import org.apache.hadoop.conf.Configuration;:导入Hadoop配置相关的类。
3.import org.apache.hadoop.ipc.RPC;:导入Hadoop IPC(Inter-Process Communication)相关的类。
4.import org.apache.hadoop.ipc.Server;:导入Hadoop IPC中的服务器类。
5.import java.io.IOException;:导入处理输入输出异常的类。


6.类定义:


7.public class NamenodeServer implements RPCprotocol:定义了一个名为 NamenodeServer 的类,该类实现了之前提到的 RPCprotocol 接口。


8.mkdirs 方法实现:


9.public void mkdirs(String path):实现了 RPCprotocol 接口中的 mkdirs 方法。在这个具体的实现中,它简单地在服务器端打印一条消息,指示在服务端创建了指定路径的目录。


10.main 方法:


11.public static void main(String[] args) throws IOException:主方法,是程序的入口点。
12.Server server = new RPC.Builder(new Configuration())...:创建了一个 Server 实例,通过 RPC.Builder 构建。指定了服务器的配置、绑定地址(localhost)、端口号(9999)、使用的协议(RPCprotocol.class),以及服务器实例(NamenodeServer 的一个实例)。
13.System.out.println("服务器开始工作 ");:打印一条消息,指示服务器开始工作。
14.server.start();:启动服务器,开始监听指定的端口,等待客户端的远程调用请求。

综合起来,这段代码实现了一个简单的Hadoop RPC服务器,该服务器监听在本地地址(localhost)的9999端口上,并实现了RPCprotocol接口中的mkdirs方法。当客户端通过RPC调用mkdirs方法时,服务器会在控制台上打印一条消息,指示在服务端创建了指定路径的目录。

package com.nefu.rpc;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;import java.io.IOException;
import java.net.InetSocketAddress;public class HdfsClient {public static void main(String[] args) throws IOException {RPCprotocol client = RPC.getProxy(RPCprotocol.class, RPCprotocol.versionID, new InetSocketAddress("localhost", 9999), new Configuration());System.out.println("我是客户端");client.mkdirs("/input");}
}

这段代码实现了一个简单的Hadoop RPC客户端。让我们逐行解释:

1.导包语句:


2.import org.apache.hadoop.conf.Configuration;:导入Hadoop配置相关的类。
3.import org.apache.hadoop.ipc.RPC;:导入Hadoop IPC(Inter-Process Communication)相关的类。
4.import java.io.IOException;:导入处理输入输出异常的类。
5.import java.net.InetSocketAddress;:导入处理网络地址的类。


6.类定义:


7.public class HdfsClient:定义了一个名为 HdfsClient 的类。


8.main 方法实现:


9.public static void main(String[] args) throws IOException:主方法,是程序的入口点。
10.RPCprotocol client = RPC.getProxy(RPCprotocol.class, RPCprotocol.versionID, new InetSocketAddress("localhost", 9999), new Configuration());:通过 RPC.getProxy 方法创建了一个代理对象 client,该对象实现了 RPCprotocol 接口。这个代理对象将用于向服务器发起RPC调用。
11.System.out.println("我是客户端");:打印一条消息,指示这是客户端的输出。
12.client.mkdirs("/input");:通过代理对象调用远程服务器的 mkdirs 方法,传递了一个路径参数 "/input"。

综合起来,这段代码实现了一个Hadoop RPC客户端,该客户端连接到在本地地址(localhost)的9999端口上运行的RPC服务器,并通过RPC调用向服务器发送了一个 mkdirs 请求,创建了名为 "/input" 的目录。客户端在控制台上输出了一条消息,指示它是客户端。


http://www.ppmy.cn/news/1263310.html

相关文章

自动驾驶技术的发展

自动驾驶技术是指利用计算机、传感器和先进的算法来实现车辆自主行驶的技术。随着科技的迅速发展,自动驾驶技术已成为汽车行业的热点和未来的趋势。它不仅可以提升交通安全,减少交通事故,还可以提高交通效率,减少能源消耗&#xf…

【已解决】SpringBoot Maven 打包失败:class lombok.javac.apt.LombokProcessor 错误

文章目录 出错原因解决办法总结 最新项目部署的时候&#xff0c;出现了一个maven打包失败的问题&#xff0c;主要是lombok这个组件出的问题&#xff0c;具体的错误信息如下&#xff1a; 我的lombok版本如下&#xff1a; <dependency><groupId>org.projectlombok&l…

综述 2023-IEEE-TCBB:生物序列聚类方法比较

Wei, Ze-Gang, et al. "Comparison of methods for biological sequence clustering." IEEE/ACM Transactions on Computational Biology and Bioinformatics (2023). https://ieeexplore.ieee.org/document/10066180 被引次数&#xff1a;1&#xff1b;研究背景&am…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑垃圾处理与调峰需求的可持续化城市多能源系统规划》

这个标题涵盖了城市多能源系统规划中的两个重要方面&#xff1a;垃圾处理和调峰需求&#xff0c;并强调了规划的可持续性。 考虑垃圾处理&#xff1a; 含义&#xff1a; 垃圾处理指的是城市废弃物的管理和处置。这可能涉及到废物分类、回收利用、焚烧或填埋等方法。重要性&…

webSRc实现浏览器播放rtsp【海康】

先上代码 <template><div>video的配置自己写<video id"video" autoplay width"900" height"900"></video></div> </template><script> export default {name: index1,data() {return {webRtcServer: …

3D模型制作木质纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 本文将讲解如何使用GLTF 编辑器 -NSDT 在线材质编辑工具为3D模型设置…

python写数据进es中

1、自定义inde为&#xff1a;xxxx&#xff0c;data_to_insert也可以自定义函数 from elasticsearch import Elasticsearch from datetime import datetime, timedelta es Elasticsearch([http://es地址1:9200, es地址2:9200, es地址3:9200]) current_date datetime.now() for…

计算机方向的一些重要缩写和简介

参考&#xff1a; 深度学习四大类网络模型 干货|机器学习超全综述&#xff01; 机器学习ML、卷积神经网络CNN、循环神经网络RNN、马尔可夫蒙特卡罗MCMC、生成对抗网络GAN、图神经网络GNN——人工智能经典算法 MLP&#xff08;Multi Layer Perseption&#xff09;用在神经网络中…