ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hadoop RPC简介

2021-02-13 16:34:29  阅读:111  来源: 互联网

标签:简介 Hadoop starzy RPC new com 服务端


导入依赖

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.7</version>
        </dependency>

编写Hadoop RPC协议

public interface ClientProtocol {
    long versionID = 1234L;

    /**
     * 创建目录
     */
    void mkDir(String path);
}

编写Hadoop RPC 服务端

public class NameNodeRpcServer implements ClientProtocol {

    /**************************************************************
     * TODO_ZH https://www.cnblogs.com/starzy
     * @Description: 创建目录
     */
    public void mkDir(String path) {
        System.out.println("服务器端:" + path);
    }
    /**************************************************************
     * TODO_ZH https://www.cnblogs.com/starzy
     * @Description: 构建Hadoop RPC并启动
     */
    public static void main(String[] args) throws IOException {

        /************************************************************
         * TODO_ZH starzy https://www.cnblogs.com/starzy
         *  注释:构建 Hadoop RPC 服务端
         *  使用构建者模式进行构建 Hadoop RPC
         */
        Server server = new RPC.Builder(new Configuration())
                .setBindAddress("localhost")
                .setPort(9999)
                .setProtocol(ClientProtocol.class)
                .setInstance(new NameNodeRpcServer())
                .build();
        System.out.println("服务端 Hadoop RPC 启动");

        /**************************************************************
         * TODO_ZH starzy https://www.cnblogs.com/starzy
         * 注释:启动服务端Hadoop RPC
         */
        server.start();
    }
}

编写Hadoop RPC 客户端调用服务端

/***************************************************************
 *TODO-ZH starzy https://www.cnblogs.com/starzy
 * 注释: RPC 客户端
 */
public class HDFSClient {
    public static void main(String[] args) throws IOException {
        /*****************************************************************************************************
         *TODO-ZH starzy https://www.cnblogs.com/starzy
         * 注释: 获取服务端代理(客户端)
         */
        ClientProtocol namenode = RPC.getProxy(ClientProtocol.class,
                1234L,
                new InetSocketAddress("localhost", 9999),
                new Configuration());

        /***************************************************************
         *TODO-ZH starzy https://www.cnblogs.com/starzy
         * 注释:调用服务端代码
         */
        namenode.mkDir("/user/local/test");
    }
}

Hadoop RPC特点

  1. RPC指不同进程之间方法的调用,分别为客户端和服务端,并且是客户端调用服务端的方法,方法执行是在服务端

  2. 如果实现RPC调用,必须实现RPC协议且协议中必须定义versionID

  3. 服务端必须实现RPC协议

  4. 凡是jps命令看到的服务都是RPC服务端

  5. 构建RPC服务端通过构建者模式进行创建

    Server server = new RPC.Builder(new Configuration())
                    .setBindAddress("localhost")
                    .setPort(9999)
                    .setProtocol(ClientProtocol.class)
                    .setInstance(new NameNodeRpcServer())
                    .build();
    
  6. RPC客户端通过RPC代理进行获取

    ClientProtocol namenode = RPC.getProxy(ClientProtocol.class,
                    1234L,
                    new InetSocketAddress("localhost", 9999),
                    new Configuration());
    

详细实现代码参见:https://gitee.com/starzy/learn-hadoop

标签:简介,Hadoop,starzy,RPC,new,com,服务端
来源: https://www.cnblogs.com/starzy/p/14400300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有