博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop_12_Hadoop 中的RPC框架演示
阅读量:5968 次
发布时间:2019-06-19

本文共 2106 字,大约阅读时间需要 7 分钟。

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及其依赖包导入进来就可以了

 

转载于:https://www.cnblogs.com/yaboya/p/9197946.html

你可能感兴趣的文章
linux经典命令-Web服务器管理
查看>>
shell脚本七十问
查看>>
使用sp_monitor 查看SQL Server统计信息
查看>>
使用SQL Storage Compress压缩SQL Server 数据库文件
查看>>
使用镜像数据库减轻报表的负载
查看>>
【noip 2016】 蚯蚓(earthworm)
查看>>
【unit7 & unit9】cifs网络文件系统访问;vsftp服务
查看>>
20145328 《信息安全系统设计基础》第2周学习总结
查看>>
ssh user@host "command" 与login host运行shell的区别
查看>>
设置redis访问密码
查看>>
C# 数据库连接字符串拼接
查看>>
SSL/TLS深度解析--测试TLS/SSL加密
查看>>
hdu4405 掷骰子走格子
查看>>
我的友情链接
查看>>
from_子句-内连接-左连接-右连接
查看>>
我的友情链接
查看>>
Spring MVC 数据回显
查看>>
(三)Redis两种持久化方案
查看>>
我的友情链接
查看>>
KVM 管理与使用说明
查看>>