hdfs回顾总结(3)---使用hadoopRpc模拟namenode元数据的查询

本文通过自定义Hadoop RPC框架,模拟实现了NameNode元数据查询功能。主要包括接口规范定义、服务器端业务逻辑实现及服务发布、客户端调用流程等。

RPC的原理可以参考之前的博客自定义rpc的实现,本文做的仅仅是hadooprpc的简单调用来模拟实现namenode元数据的业务查询。

一、protocol约定(接口规范)

ClientNamenodeProtocol.java

package HadoopRpc.protocol;

/**
 * Created by tianjun on 2017/3/16 0016.
 */
public interface ClientNamenodeProtocol {
    public static final long versionID = 1L;
    public String getMetaData(String path);
}

二、服务器端

1、具体业务的实现:
MyNameNode.java

package HadoopRpc.service;

import HadoopRpc.protocol.ClientNamenodeProtocol;

/**
 *
 * Created by tianjun on 2017/3/16 0016.
 */
public class MyNameNode implements ClientNamenodeProtocol{

//    模拟namenode的业务方法之一:查询元数据
    @Override
    public String getMetaData(String path){
        return path + ": 3 - {BLK_1,BLK_2} dn3...";
    }
}

2、服务端的启动:
PublishServiceUtil.java

package HadoopRpc.service;

import HadoopRpc.protocol.ClientNamenodeProtocol;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.Server;

import java.io.IOException;

/**
 * 发布服务
 * Created by tianjun on 2017/3/16 0016.
 */
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(ClientNamenodeProtocol.class)
                .setInstance(new MyNameNode());

        Server server = builder.build();
        server.start();

    }
}

三、客户端

客户端的接口规范,必须和服务器端的一模一样(包括包名和类名)
MyHdfsClient.java

package HadoopRpc.client;

import HadoopRpc.protocol.ClientNamenodeProtocol;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

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

/**
 * Created by tianjun on 2017/3/16 0016.
 */
public class MyHdfsClient {
    public static void main(String[] args) throws IOException {
       ClientNamenodeProtocol namenode =  RPC.getProxy(ClientNamenodeProtocol.class, 1L, new InetSocketAddress("localhost", 8888), new Configuration());
       String metaDate = namenode.getMetaData("/tianjun");
        System.out.println(metaDate);
    }
}

四、结果

先启动服务器端,在启动客户端,在客户端可以看到元数据的具体信息如下:

/tianjun: 3 - {BLK_1,BLK_2} dn3...

当然这仅仅是模拟,真正的元数据的管理是在hadoop的FSNamesystem.java这个类中。
hadoopRPC框架是在hadoop的dadoop-common的jar中。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值