您的位置:首页 > Web前端 > Node.js

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

2017-03-16 10:14 239 查看
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中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoopRPC