zoukankan      html  css  js  c++  java
  • 模拟hadoop-rpc通信

    一、RPC服务类

    package com.css.rpc.server;
    
    import java.io.IOException;
    
    import org.apache.hadoop.HadoopIllegalArgumentException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    import org.apache.hadoop.ipc.RPC.Builder;
    import org.apache.hadoop.ipc.RPC.Server;
    
    import com.css.rpc.protocol.ClientNamenodeProtocol;
    
    /**
     * RPC服务类
     */
    public class PublishServer {
        public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
            // 1.构建RPC框架
            Builder builder = new RPC.Builder(new Configuration());
            // 2.绑定地址
            builder.setBindAddress("localhost");
            // 3.绑定端口号
            builder.setPort(7777);
            // 4.绑定协议
            builder.setProtocol(ClientNamenodeProtocol.class);
            // 5.调用协议的实现类
            builder.setInstance(new MyNameNode());
            // 6.创建服务
            Server server = builder.build();
            server.start();
        }
    }

    二、自定义遵循的协议类

    package com.css.rpc.protocol;
    
    /**
     * 自定义遵循的协议类
     */
    public interface ClientNamenodeProtocol {
        // 1.定义协议的id
        public static final long versionID = 1L;
        // 2.定义方法(拿到元数据的方式)
        public String getMetaData(String path);
    }

    三、自定义协议的实现类

    package com.css.rpc.server;
    
    import com.css.rpc.protocol.ClientNamenodeProtocol;
    
    /**
     * 自定义协议的实现类
     */
    public class MyNameNode implements ClientNamenodeProtocol{
        @Override
        public String getMetaData(String path) {
            return path + ": 3 - {BLK_1,BLK_2,BLK_3...}";
        }
    }

    四、获取元数据信息(客户端)

    package com.css.rpc.client;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    import com.css.rpc.protocol.ClientNamenodeProtocol;
    
    /**
     * 获取元数据信息
     */
    public class GetHDFS {
        public static void main(String[] args) throws IOException {
            // 1.拿到协议
            ClientNamenodeProtocol proxy = RPC.getProxy(ClientNamenodeProtocol.class, 1L, new InetSocketAddress("localhost", 7777), new Configuration());
            // 2.发送请求
            String metaData = proxy.getMetaData("/hello");
            // 3.拿到元数据信息
            System.out.println(metaData);
        }
    }

     

  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/areyouready/p/9813589.html
Copyright © 2011-2022 走看看