通信协议 远程调用RPC

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" 的目录。客户端在控制台上输出了一条消息,指示它是客户端。

相关推荐
EasyGBS27 分钟前
国标GB28181公网直播EasyGBS国标GB28181软件管理解决方案
大数据·网络·音视频·媒体·视频监控·gb28181
2403_8757368734 分钟前
道品科技的水肥一体化智能灌溉:开启现代农业的创新征程
大数据·人工智能·1024程序员节
河南查新信息技术研究院34 分钟前
科技查新在医药健康领域的应用
大数据·科技·全文检索
青云交1 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:应对海量复杂数据的挑战(上)(7/30)
大数据·性能优化·impala·数据分区·查询优化·海量复杂数据·经典案例
天冬忘忧1 小时前
Spark 程序开发与提交:本地与集群模式全解析
大数据·分布式·spark
NETFARMER运营坛1 小时前
如何优化 B2B 转化率?这些步骤你不可不知
大数据·安全·阿里云·ai·ai写作
易境通代购商城系统、集运SAAS系统1 小时前
集运企业营销获客策略:创新与传统并重,打造品牌忠诚度
大数据
LNTON羚通5 小时前
CPU算法分析LiteAIServer视频智能分析平台视频智能分析:抖动、过亮与过暗检测技术
大数据·目标检测·音视频·视频监控
我就说好玩6 小时前
2020年美国总统大选数据分析与模型预测
大数据·python·数据挖掘·数据分析·pandas·sklearn
2403_875736876 小时前
道品科技智能水肥一体化技术要点及实施效果
大数据·科技·智慧城市