1.创建一个Maven工程,加入hadoop-common依赖。
2.编写Protocol接口类
public interface ClientNamenodeProtocol {
public static final long versionID=1L; //会读取这个版本号, 但可以和客户端的不一样, 没有校验
public String getMetaData(String path);
}
3.编写Protocol接口实现类
public class MyNameNode implements ClientNamenodeProtocol{
//模拟namenode的业务方法之一:查询元数据
@Override
public String getMetaData(String path){
return path+": 3 - {BLK_1,BLK_2} ....";
}
}
4.编写服务端代码
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();
}
}
5.编写客户端
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("/angela.mygirl");
System.out.println(metaData);
}
}