Hadoop的RPC调用示例

定义一个通讯协议的接口

public interface ClientNamenodeProtocal {

    long versionID = 1L;

    String getMetaData(String path);

}

实现类

public class MyNameNode implements ClientNamenodeProtocal{

    @Override
    public String getMetaData(String path){

        return path+":3 - {blk_1,blk_2,blk_3}";
    }
}

服务发布类

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

import java.io.IOException;

/**
 * @author snow
 */
public class PublishServiceUtil {

    public static void main(String[] args) throws IOException {

        //建造者
        RPC.Builder builder = new RPC.Builder(new Configuration());

        builder.setBindAddress("localhost")
                .setPort(8888)
                .setProtocol(ClientNamenodeProtocal.class)
                .setInstance(new MyNameNode());

        //获取服务端对象
        RPC.Server server = builder.build();

        //启动服务器
        server.start();
    }
}

客户端访问类

import com.ghq.rpc.ClientNamenodeProtocal;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

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

/**
 * @author snow
 */
public class MyHdfsClient {

    public static void main(String[] args) throws IOException {

        ClientNamenodeProtocal proxy = RPC.getProxy(ClientNamenodeProtocal.class, 1L,
                new InetSocketAddress("localhost", 8888), new Configuration());


        String metaData = proxy.getMetaData("test01");

        System.out.println(metaData);
    }
}

执行步骤:

  1. 启动PublishServiceUtil类
  2. 启动MyHdfsClient类,即可

猜你喜欢

转载自blog.csdn.net/guo20082200/article/details/82290133