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);
        }
    }

     

  • 相关阅读:
    第十五次-语法制导的语义翻译
    第十四次--算符优先分析
    第十二次-递归下降语法分析
    第十一次-LL(1)文法的判断,递归下降分析程序
    第十次-消除左递归
    第九次-DFA最小化,语法分析初步
    个人作业——软件工程实践总结作业
    【评分】Alpha阶段
    K 班前7次作业成绩汇总
    【评分】第七次作业--项目需求分析(团队)
  • 原文地址:https://www.cnblogs.com/areyouready/p/9813589.html
Copyright © 2011-2022 走看看