zoukankan      html  css  js  c++  java
  • 打个 hadoop RPC的栗子

    以豁达和宽容的心态对待学习和生活中遇到的不如意的事。

    需求

    通过RPC远程调用服务端函数来实现加法操作

    maven 依赖

    依赖如下:

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.0</version>
    </dependency>            

    定义RPC通信功能接口

    定义如下:

    package inter;
    
    import org.apache.hadoop.ipc.VersionedProtocol;
    
    import java.io.IOException;
    
    public interface ClientProtocol extends VersionedProtocol {
        public static final long versionID = 1L;
    int add(int v1, int v2) throws IOException;
    }

    接口实现

    实现如下:

    package impl;
    
    import inter.ClientProtocol;
    import org.apache.hadoop.ipc.ProtocolSignature;
    
    import java.io.IOException;
    
    public class ClientProtocolImpl implements ClientProtocol {public int add(int v1, int v2) throws IOException {
            return v1 + v2;
        }
    
        public long getProtocolVersion(String s, long l) throws IOException {
            return ClientProtocol.versionID;
        }
    
        public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {
            return new ProtocolSignature(ClientProtocol.versionID, null);
        }
    }

    服务端代码

    如下:

    package server;
    
    import impl.ClientProtocolImpl;
    import inter.ClientProtocol;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    import java.io.IOException;
    
    public class Server {
        public static void main(String[] args) throws IOException {
            RPC.Server server = new RPC.Builder(new Configuration()).setProtocol(ClientProtocol.class)
                    .setInstance(new ClientProtocolImpl()).setBindAddress("localhost")
                    .setPort(9999)
                    .setNumHandlers(5)
                    .build();
            server.start();
        }
    }

    客户端代码

    如下:

    package client;
    
    import inter.ClientProtocol;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    
    public class Client {
        public static void main(String[] args) throws IOException {
            ClientProtocol proxy = RPC.getProxy(ClientProtocol.class,
                    ClientProtocol.versionID,
                    new InetSocketAddress("localhost", 9999),
                    new Configuration());
            System.out.println("proxy.add(1,2) = " + proxy.add(1, 2));
        }
    }

    总结

    用户只需要实现四部分:RPC行为接口定义,服务端RPC接口行为实现,客户端实现,服务端实现就可以来使用RPC了。

  • 相关阅读:
    关于新人的培养与程序的测试
    关于23种设计模式的有趣见解
    看足球学习管理团队
    《Effective C#》Item 1
    测试系列之五回归测试
    VS2005 VS2008新建网站和新建项目里选Web应用程序区别
    SaaS的研究
    DropDownList控件选中项的深入研究
    用ie9浏览器若出现看视频有声音没图像的问题处理
    zencart目录页出现c.html网址的解决方法
  • 原文地址:https://www.cnblogs.com/johnny666888/p/12613226.html
Copyright © 2011-2022 走看看