HadoopRPC框架-----模拟NameNode和Client通信

来源:互联网 发布:httpclient js 编辑:程序博客网 时间:2024/06/08 18:45

Hadoopdatanodenamenode之间的通信是通过他们内部实现的一个RPC框架实现的,一般这个RPC框架,应用于纯后台交互系统中。

下面对其API进行一下NameNodeClient之间通信的Demo

代码:(jar自己引)

HDFS客户端:

import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import cn.luobida.hadooprpc.protocol.ClientNameNodeProtocol;public class HDFSClient {public static void main(String[] args) throws Exception {ClientNameNodeProtocol nameNode = RPC.getProxy(ClientNameNodeProtocol.class, 1L, new InetSocketAddress("localhost", 8899), new Configuration());String meta = nameNode.getMeta("/luobida");System.out.println(meta);RPC.stopProxy(nameNode);}}

通信协议:(协议中定义了一些方法给用户来调用)

public interface ClientNameNodeProtocol {public static final long versionID = 1L;public String getMeta(String path);}


伪NameNode:

import cn.luobida.hadooprpc.protocol.ClientNameNodeProtocol;public class MyNameNode implements ClientNameNodeProtocol {@Overridepublic String getMeta(String path) {return path + "---" + "{block1,block2,block3}" + "---"+ "{Datanode1,Datanode1,Datanode2}";}}


发布服务:

import cn.luobida.hadooprpc.protocol.ClientNameNodeProtocol;import cn.luobida.hadooprpc.service.MyNameNode;public class Publish {public static void main(String[] args) throws Exception {Builder builder = new RPC.Builder(new Configuration());builder.setBindAddress("localhost").setPort(8899).setProtocol(ClientNameNodeProtocol.class).setInstance(new MyNameNode());Server server = builder.build();server.start();}}