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

发布时间:2021年11月09日作者:atguigu浏览次数:258

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

通信协议就是接口规范。

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


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦3层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)