自编写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的客户端调用通信协议方法,方法的执行在服务端;

通信协议就是接口规范。

想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训,尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习。