使用Hadoop中的RPC框架
2017-02-22 01:11
309 查看
Hadoop中自己提供了一个RPC的框架。集群中各节点的通讯都使用了那个框架,挺有意思的。我们自己来使用一下看看。
示例代码已经上传到http://download.csdn.net/detail/mrbcy/9760207
ClientNamenodeProtocol.java
PublishServiceUtil.java
这里我为了方便,直接在一个项目中写客户端了。如果服务端跟客户端项目不同,一定要记得这一点。
MyHdfsClient.java
我们也可以在自己的项目中使用Hadoop的RPC框架,把Hadoop的Common包导入进来就可以了。
示例代码已经上传到http://download.csdn.net/detail/mrbcy/9760207
服务端
业务接口
首先定义业务方法的接口:ClientNamenodeProtocolClientNamenodeProtocol.java
package tech.mrbcy.hadooprpc.protocol; public interface ClientNamenodeProtocol { // 协议版本 public static final long versionID = 1L; public String getMetaData(String path); }
业务实现类
package tech.mrbcy.hadooprpc.service; import tech.mrbcy.hadooprpc.protocol.ClientNamenodeProtocol; public class MyNameNode implements ClientNamenodeProtocol{ //模拟NameNode的业务方法,获取元数据 @Override public String getMetaData(String path){ return path+": 3 - {BLK_1,BLK_2} ..."; } }
服务端代码
使用下面的代码可以把业务类发布为一个服务。PublishServiceUtil.java
package tech.mrbcy.hadooprpc.service; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Builder; import org.apache.hadoop.ipc.Server; import tech.mrbcy.hadooprpc.protocol.ClientNamenodeProtocol; 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(); } }
客户端
需要注意的是客户端使用的接口的完整签名必须跟服务端使用的一致。这里我为了方便,直接在一个项目中写客户端了。如果服务端跟客户端项目不同,一定要记得这一点。
MyHdfsClient.java
package tech.mrbcy.hadooprpc.client; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import tech.mrbcy.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("testRpc.log"); System.out.println(metaData); } }
我们也可以在自己的项目中使用Hadoop的RPC框架,把Hadoop的Common包导入进来就可以了。
相关文章推荐
- 使用hadoop中的RPC框架实现远程调用
- hadoop所封装的RPC框架简单使用
- Hadoop的RPC框架使用
- Hadoop V2 RPC框架使用实例
- Hadoop的RPC框架使用 < d3d1 /a> 标签: hadoop
- 轻松使用Hadoop RPC
- 轻松使用Hadoop RPC
- 轻松使用Hadoop RPC
- Hadoop Streaming框架使用(一)
- Hadoop Streaming框架使用(一)
- 深入理解Java Proxy机制 应用在 Hadoop RPC 框架
- Hadoop Streaming框架使用
- 轻松使用Hadoop RPC
- Hadoop Streaming框架使用(一)
- 轻松使用Hadoop RPC
- 使用go reflect实现一套简易的rpc框架
- 如何使用hadoop RPC机制
- Hadoop RPC整个使用流程——以DataNode向NameNode注册为例
- 在VMWare Workstation上使用RedHat Linux安装和配置Hadoop群集环境05_HDFS文件系统和Mapreduce框架的启动和运行
- Hadoop Streaming框架使用(三)