Hadoop RPC使用方法示例

碼頭工人 9年前發布 | 19K 次閱讀 Hadoop 分布式/云計算/大數據

定義RPC協議

import java.io.IOException;

import org.apache.hadoop.ipc.VersionedProtocol;

/*   DateTime: 2014年12月28日 上午9:32:12    / public interface ClientProtocol extends VersionedProtocol { //版本號,默認情況下,不同版本號的RPC客戶端與Server之間不能相互通信 public static final long versionID = 1L; public String hello(String msg) throws IOException; }</pre>

實現RPC協議

import java.io.IOException;

import org.apache.hadoop.ipc.ProtocolSignature;

/*   DateTime: 2014年12月28日 上午9:41:38    / public class ClientProtocolImpl implements ClientProtocol {

@Override
public long getProtocolVersion(String protocol, long clientVersion)
        throws IOException {
    return versionID;
}

@Override
public ProtocolSignature getProtocolSignature(String protocol,
        long clientVersion, int clientMethodsHash) throws IOException {
    return new ProtocolSignature(versionID, null);
}

@Override
public String hello(String msg) throws IOException {
    return "hello " + msg;
}


}</pre>

構建并啟動RPC Server

import java.io.IOException;

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Server;

/*   DateTime: 2014年12月28日 上午9:47:05    / public class RPCServer { private static final String HOST = "localhost"; private static final int PORT = 2181; public static void main(String[] args) throws IOException { Configuration conf = new Configuration();

    Server server = new RPC.Builder(conf).setProtocol(ClientProtocol.class)
            .setInstance(new ClientProtocolImpl()).setBindAddress(HOST)
            .setNumHandlers(2)
            .setPort(PORT).build();
    server.start();
}

}</pre>

構造并啟動RPC Clinet并發送RPC請求

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC;

/*   DateTime: 2014年12月28日 上午9:52:19    / public class RPCClient { private static final String HOST = "localhost"; private static final int PORT = 2181;

public static void main(String[] args) throws IOException {
    Configuration conf = new Configuration();
    ClientProtocol proxy = RPC.getProxy(ClientProtocol.class, ClientProtocol.versionID,
            new InetSocketAddress(HOST, PORT), conf);
    String result = proxy.hello("world");
    System.out.println(result);
}

}</pre>

 

 本文由用戶 碼頭工人 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!