zoukankan      html  css  js  c++  java
  • Hadoop RPC简介

    导入依赖

            <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

  • 相关阅读:
    ASP.NET WebAPI Get和Post 传参总结
    关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
    jqthumb.js缩略图插件-让缩略图正常显示而不变形
    解决kindeditor编辑器中使用百度地图时不能拖动坐标的问题
    Jzoj3591 数据
    Jzoj3590 珠链
    Jzoj3590 珠链
    C++蜂鸣器歌曲1
    C++蜂鸣器歌曲1
    Jzoj2309 辽哥游戏
  • 原文地址:https://www.cnblogs.com/starzy/p/14400300.html
Copyright © 2011-2022 走看看