zoukankan      html  css  js  c++  java
  • 大数据学习之HDFS的工作机制07

    1namenode+secondaryNameNode工作机制

    2datanode工作机制

    3:HDFS中的通信(代理对象RPC)

    下面用代码来实现基本的原理

    1:服务端代码

    package it.dawn.HDFSPra.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 it.dawn.HDFSPra.RPC.protocol.RpcProtocol;
    
    /**
    * @version 1.0
    * @author Dawn
    * @date 2019年4月29日17:10:25
    * @return 模拟了一个rpc通信。该类是服务端
    */
    public class RpcServer {
    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(6666);
    
    //4.绑定协议
    builder.setProtocol(RpcProtocol.class);
    
    //5.调用协议的实现类
    builder.setInstance(new MyRpcProtocol());
    
    //6.创建服务
    Server servers= builder.build();
    servers.start();
    }
    
    }
    

      

    2:代理对象接口

    package it.dawn.HDFSPra.RPC.protocol;
    
    public interface RpcProtocol {
    //1.定义协议的id
    public static final long versionID=1L;
    
    //2.定义方法(拿到元数据的方式)
    public String getMetaData(String path);
    
    }
    

      

    3:代理对象的实现

    package it.dawn.HDFSPra.RPC.server;
    
    import it.dawn.HDFSPra.RPC.protocol.RpcProtocol;
    
    public class MyRpcProtocol implements RpcProtocol{
    
    @Override
    public String getMetaData(String path) {
    
    return path+": 3 - {BLK_1,blk_2,BLK_3...}";
    }
    
    }
    

      

    4:客服端

    package it.dawn.HDFSPra.RPC.client;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    import it.dawn.HDFSPra.RPC.protocol.RpcProtocol;
    
    /**
    * @version 1.0
    * @author Dawn
    * @date 2019年4月29日17:10:25
    * @return 模拟了一个rpc通信。该类是客服端
    */
    public class Client {
    public static void main(String[] args) throws IOException {
    //1.拿到协议
    RpcProtocol protocol =RPC.getProxy(RpcProtocol.class, 1L, new InetSocketAddress("localhost", 6666), new Configuration());
    
    //2.发送请求
    String result=protocol.getMetaData("/dawnhahhaha");
    
    //3.拿到元数据信息
    System.out.println(result);
    }
    }
    

      

  • 相关阅读:
    Linux 通过sendmail 发邮件到外部邮箱
    基于Ruby的Watir-WebDriver自动化测试方案
    高性能Linux服务器构建实战笔记
    Unix Linux 通用vi命令,使用帮助手册【珍藏版】
    软件测试人员必备Linux命令(初、中、高级)
    网络七层知多少,学以致用
    手机终端高级测试工程师经验总结
    临别前夕,工作总结 于2014年8月13日 终稿
    基于ruby的watir自动化测试 笔记二
    高级软件测试工程师笔试题
  • 原文地址:https://www.cnblogs.com/hidamowang/p/10793289.html
Copyright © 2011-2022 走看看