vlambda博客
学习文章列表

自编写RPC通信实例解析HadoopRPC通信原理

点击上方蓝字
关注我吧

1

HDFS、YARN、MapReduce三者关系


自编写RPC通信实例解析HadoopRPC通信原理

2

需求解说


模拟RPC的客户端、服务端、通信协议三者如何工作的

自编写RPC通信实例解析HadoopRPC通信原理


3

代码编写


(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, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d%p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.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{
@Override 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"); }}

4

测试


(1)启动服务端

观察控制台打印:服务器开始工作

在控制台Terminal窗口输入,jps,查看到NNServer服务

(2)启动客户端

观察客户端控制台打印:我是客户端

观察服务端控制台打印:服务端,创建路径/input

(3)总结

RPC的客户端调用通信协议方法,方法的执行在服务端;

通信协议就是接口规范。



自编写RPC通信实例解析HadoopRPC通信原理

自编写RPC通信实例解析HadoopRPC通信原理

B站|大数据那些事


想获取更多更全资料

扫码加好友入群

欢迎各位大佬加入开源共享

共同面对大数据领域疑难问题

来稿请投邮箱:[email protected]