Hadoop中自己提供了一个RPC的框架。集群中各节点的通讯都使用了那个框架

1.服务端

1.1.业务接口:ClientNamenodeProtocol

package cn.bigdata.hdfs.hadoopRpc.protocol;

//定义业务接口方法
public interface ClientNamenodeProtocol {
// 协议版本号
public static final long versionID = 1L;
public String getMetaData(String path);
}

1.2.业务接口实现类:MyNameNode

package cn.bigdata.hdfs.hadoopRpc.service;

import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;

public class MyNameNode implements ClientNamenodeProtocol{

    @Override
public String getMetaData(String path) {
// 模拟NameNode的业务方法,获取元数据
return path+": 3 - {BLK_1,BLK_2} ...";
}
}

1.3.服务端类:将业务实现类发布为一个服务

package cn.bigdata.hdfs.hadoopRpc.service;

import java.io.IOException;

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 cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol; //使用下面的代码可以把业务类发布为一个服务
public class PublishServiceUtil {
public static void main(String[] args) throws IOException {
Builder builder = new RPC.Builder(new Configuration());
builder.setBindAddress("localhost")
.setPort(8888)
.setProtocol(ClientNamenodeProtocol.class)
.setInstance(new MyNameNode()); Server build = builder.build();
build.start();
}
}

2.客户端

package cn.bigdata.hdfs.hadoopRpc.client;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC; import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol; public class MyHdfsClient {
public static void main(String[] args) throws Exception {
//获取代理对象
ClientNamenodeProtocol nameNode = RPC.getProxy(ClientNamenodeProtocol.class,
1L, // 这里指定的协议版本号要跟接口中的versionID的值保持一致
new InetSocketAddress("localhost",8888),
new Configuration()); String metaData = nameNode.getMetaData("/angelababy");
System.out.println(metaData);
}
}

我们也可以在自己的项目中使用Hadoop的RPC框架,把Hadoop的Common及其依赖包导入进来就可以了

最新文章

  1. JAVA基础培训(isoft)
  2. ListView的CheckBox实现全部选中/不选中
  3. Numeral.js – 格式化和操作数字的 JavaScript 库
  4. Matlab中数组元素引用——三种方法
  5. Ubuntu 12 修改当前用户密码:new password is too simple
  6. BigDecimal 的roundMode 舍位模式
  7. 用js枚举实现简易菜单效果
  8. iOS--APP 登录界面图(xuer)
  9. 2016/4/21 关于jquery复习
  10. js工具类 ----正则
  11. [收藏]Spring Security中的ACL
  12. DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html
  13. xml_03
  14. php分页类代码和使用
  15. Storm流分组介绍
  16. mac 卸载通过官网下载包安装的node
  17. C# 0xC0000005 捕获
  18. 第五章JavaScript
  19. 给eclipse设置自动补全的步骤
  20. IOS应用内支付IAP从零开始详解

热门文章

  1. Android之View的内容
  2. swift 第八课 CollectView的 添加 footerView 、headerView
  3. Response.setContentType()参数说明
  4. linux中环境变量设置
  5. Redis 根据Key模糊批量查询数据
  6. 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建
  7. 【转贴】linux 终端报Message from syslogd
  8. (十四)springMvc 对 restful 的支持
  9. 20190805-Python基础 第二章 列表和元组(2)列表
  10. python 分支语句 等值判断 逻辑运算符