自编写RPC通信实例解析HadoopRPC通信原理
HDFS、YARN、MapReduce三者关系
需求解说
模拟RPC的客户端、服务端、通信协议三者如何工作的
代码编写
(0)在pom.xml中增加如下依赖
<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency></dependencies>
(1)在项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”,在文件中填入
log4j.rootLogger=INFO, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d%p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=target/spring.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d%p [%c] - %m%n
(2)在HDFSClient项目基础上创建包名com.atguigu.rpc
(3)创建RPC协议
package com.atguigu.rpc;public interface RPCProtocol {long versionID = 666;void mkdirs(String path);}
(4)创建RPC服务端
package com.atguigu.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 NNServer 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(8888).setProtocol(RPCProtocol.class).setInstance(newNNServer()).build();System.out.println("服务器开始工作");server.start();}}
(5)创建RPC客户端
package com.atguigu.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,newInetSocketAddress("localhost", 8888),new Configuration());System.out.println("我是客户端");client.mkdirs("/input");}}
测试
(1)启动服务端
观察控制台打印:服务器开始工作
在控制台Terminal窗口输入,jps,查看到NNServer服务
(2)启动客户端
观察客户端控制台打印:我是客户端
观察服务端控制台打印:服务端,创建路径/input
(3)总结
RPC的客户端调用通信协议方法,方法的执行在服务端;
通信协议就是接口规范。
B站|大数据那些事
想获取更多更全资料
扫码加好友入群
欢迎各位大佬加入开源共享
共同面对大数据领域疑难问题
来稿请投邮箱:[email protected]
