socket,hadoop的rpc

2017-08-14  本文已影响0人  pamperxg
personClass = Class.forName(className);//获取文件对象
Constructor  constructor  = personClass.getConstructor(Long.class,String.class);//获取构造函数,参数的个数类型可以确定是哪个构造函数
还可以通过各种getxx获取一个类的详细信息

动态代理:
为其他对象提供一种代理以控制对这个对象的访问。可以在不修改原业务的基础上,基于原业务的方法,进行业务拓展,实现新的业务。
nio:

nio

传统io:

传统io

hadoop中rpc框架(导入hadoop common即可用):
服务端工程:

通信接口:
public interface ClientNamenodeProtocol {
    public static final long versionID=1L;
    public String getMetaData(String path);
}


业务实现:
import hadooprpc.protocol.ClientNamenodeProtocol;
public class MyNameNode implements ClientNamenodeProtocol{
    //模拟namenode的业务方法之一:查询元数据
    @Override
    public String getMetaData(String path){     
        return path+": 3 - {BLK_1,BLK_2} ....";     
    }   
}


将业务发布为服务:
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 hadooprpc.protocol.ClientNamenodeProtocol;

public class PublishServiceUtil {
    public static void main(String[] args) throws Exception {
        Builder builder = new RPC.Builder(new Configuration());
        builder.setBindAddress("localhost")
        .setPort(8888)
        .setProtocol(ClientNamenodeProtocol.class)
        .setInstance(new MyNameNode());     
        Server server = builder.build();
        server.start();
    }   
}

客户端工程:

通信接口:
和服务端完全一致(包路径一致,接口中必须定义一个常量:版本号)
请求远程功能客户端:
import java.net.InetSocketAddress;

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

import hadooprpc.protocol.ClientNamenodeProtocol;

public class MyHdfsClient {     
    public static void main(String[] args) throws Exception {
        ClientNamenodeProtocol namenode = RPC.getProxy(ClientNamenodeProtocol.class, 1L, new InetSocketAddress("localhost", 8888), new Configuration());
        String metaData = namenode.getMetaData("/aaa");
        System.out.println(metaData);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读