运用Hadoop的RPC框架来进行数据交互(大数据学习8)

Hadoop中自己提供了一个RPC的框架。集群中各节点的通讯都使用了那个框架,挺有意思的。我们自己来使用一下看看

目录结构

服务端

业务接口

首先定义业务方法的接口:ClientNamenodeProtocol

ClientNamenodeProtocol.java

package com.lyz.bigdata.hadooprpc.protocol;

/**
 *@Author:759057893@qq.com Lyz
 *@Date: 2019/1/23 15:43
 *@Description:
 **/

public interface ClientNamenodeProtocol {
    //协议版本
    public static final long versionID =1L;

    public String getMetaData (String path);


}

业务实现类

package com.lyz.bigdata.hadooprpc.servvice;

import com.lyz.bigdata.hadooprpc.protocol.ClientNamenodeProtocol;

/**
 *@Author:759057893@qq.com Lyz
 *@Date: 2019/1/23 15:36
 *@Description:
 **/
public class MyNameNode implements ClientNamenodeProtocol {

    // 模拟namenode的业务方法之一:查询元数据
    @Override
    public String getMetaData(String path) {

        return path+": 3 - {BLK_1,BLK_2 } ....";
    }
}

服务端代码

使用下面的代码可以把业务类发布为一个服务。

PublishServiceUtil.java

package com.lyz.bigdata.hadooprpc.servvice;

import com.lyz.bigdata.hadooprpc.protocol.ClientNamenodeProtocol;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC.Builder;
import org.apache.hadoop.ipc.Server;

/**
 *@Author:759057893@qq.com Lyz
 *@Date: 2019/1/23 15:50
 *@Description:
 **/
public class PublishServiceUtil {

    public static void main(String[] args) throws Exception {

        Builder builder = new Builder(new Configuration());
        builder.setBindAddress("localhost")
                .setPort(8888)
                .setProtocol(ClientNamenodeProtocol.class)
                .setInstance(new MyNameNode());

        Server service = builder.build();
        service.start();

    }
}

客户端

需要注意的是客户端使用的接口的完整签名必须跟服务端使用的一致。

这里我为了方便,直接在一个项目中写客户端了。如果服务端跟客户端项目不同,一定要记得这一点。

MyHdfsClient.java

package com.lyz.bigdata.hadooprpc.client;

import com.lyz.bigdata.hadooprpc.protocol.ClientNamenodeProtocol;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.net.InetSocketAddress;

/**
 *@Author:759057893@qq.com Lyz
 *@Date: 2019/1/23 16:07
 *@Description:
 **/
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("/rhm.love");
        System.out.println(metaData);
    }
}

运行结果

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3分钟秒懂大数据

你的打赏就是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值