zoukankan      html  css  js  c++  java
  • Hadoop_12_Hadoop 中的RPC框架演示

    Hadoop中自己提供了一个RPC的框架。集群中各节点的通讯都使用了那个框架

    1.服务端

    1.1.业务接口:ClientNamenodeProtocol

    package cn.bigdata.hdfs.hadoopRpc.protocol;
    
    //定义业务接口方法
    public interface ClientNamenodeProtocol {
        // 协议版本号
        public static final long versionID = 1L;
        public String getMetaData(String path);
    }

    1.2.业务接口实现类:MyNameNode

    package cn.bigdata.hdfs.hadoopRpc.service;
    
    import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;
    
    public class MyNameNode implements ClientNamenodeProtocol{
    
        @Override
        public String getMetaData(String path) {
            // 模拟NameNode的业务方法,获取元数据
            return path+": 3 - {BLK_1,BLK_2} ...";
        }
    }

    1.3.服务端类:将业务实现类发布为一个服务

    package cn.bigdata.hdfs.hadoopRpc.service;
    
    import java.io.IOException;
    
    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 cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;
    
    //使用下面的代码可以把业务类发布为一个服务
    public class PublishServiceUtil {
        public static void main(String[] args) throws IOException {
            Builder builder = new RPC.Builder(new Configuration());
            builder.setBindAddress("localhost")
            .setPort(8888)
            .setProtocol(ClientNamenodeProtocol.class)
            .setInstance(new MyNameNode());
            
            Server build = builder.build();
            build.start();
        }
    }

    2.客户端

    package cn.bigdata.hdfs.hadoopRpc.client;
    import java.net.InetSocketAddress;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;
    
    public class MyHdfsClient {
        public static void main(String[] args) throws Exception {
            //获取代理对象
            ClientNamenodeProtocol nameNode = RPC.getProxy(ClientNamenodeProtocol.class, 
                    1L, // 这里指定的协议版本号要跟接口中的versionID的值保持一致
                    new InetSocketAddress("localhost",8888), 
                    new Configuration());
            
            String metaData = nameNode.getMetaData("/angelababy");
            System.out.println(metaData);
        }
    }

    我们也可以在自己的项目中使用Hadoop的RPC框架,把Hadoop的Common及其依赖包导入进来就可以了

  • 相关阅读:
    LOJ-10108(欧拉回路+并查集)一个图至少用几笔画成
    hdu-1878(欧拉回路)
    LOJ-10106(有向图欧拉回路的判断)
    欧拉回路
    LOJ-10105(欧拉回路模板,套圈法,递归)
    LOJ-10102(求A到B之间的割点)
    LOJ-10103(求删去割点后最多的连通分量)
    LOJ-10102(桥的判断)
    【XSY2278】【HDU5669】the Red Sun(线段树+dijkstra)
    【XSY2434】【CF787D】遗产(线段树+dijkstra)
  • 原文地址:https://www.cnblogs.com/yaboya/p/9197946.html
Copyright © 2011-2022 走看看