Hadoop-rpc调用案例,服务端,客户端代码案例

1. Hadoop-rpc框架

在hadoop中提供了一个rpc框架,通过这个rpc框架可以编写一个rpc服务端程序,然后发布出去供客户端调用。

1.1.服务端代码

其中服务端(example-hadoop-rpc-server),其中代码结果如下:

代码说明:

ClientNamenodeProtocal

接口定义

NameNode

接口的实现

ServerPublisher

用于发布服务的类

 

    若写服务端代码,需要一个服务端的接口,其中接口如下:

package cn.toto.rpc.protocal;

 

public interface ClientNamenodeProtocal {

 

   //为了保证客户端和服务端的版本是一致的,如果没有定义将报错

   public static final long versionID = 1L;

     

   public String getMetaData(String path);

  

}

接口的实现类是:

package cn.toto.rpc.server;

 

import cn.toto.rpc.protocal.ClientNamenodeProtocal;

 

public class NameNode implements ClientNamenodeProtocal {

 

   @Override

   public String getMetaData(String path) {

      return path + " 2 {BLK1,BLK2} {BLK1:min1,mini2} {BLK2:mini4,mini5}";

   }

 

}

    用于发布的接口类:

package cn.toto.rpc.server;

 

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.toto.rpc.protocal.ClientNamenodeProtocal;

 

public class ServerPublisher {

 

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

     

      Builder builder = new RPC.Builder(new Configuration());

     

      //暴露的仅仅是ClientNamenodeProtocal.class中的new NameNode()实现的方法

      builder.setBindAddress("localhost").setPort(8787)

             .setProtocol(ClientNamenodeProtocal.class)

             .setInstance(new NameNode());

     

      //构建一个Server,并且启动一下

      Server server = builder.build();

      server.start();

   }

}

 

1.2.客户端

写完客户端后,可以开始写客户端调用进行测试了。

    客户端的代码如下:

   代码说明:

ClientNamenodeProtocal

和服务端一样的接口

HdfsClient

用于调用的客户端代码

 

   接口代码如下:

package cn.toto.rpc.protocal;

 

public interface ClientNamenodeProtocal {

 

   //为了保证客户端和服务端的版本是一致的,如果没有定义将报错

   public static final long versionID = 1L;

     

   public String getMetaData(String path);

  

}

 

   客户端代码:

package cn.toto.rpc.client;

 

import java.io.IOException;

import java.net.InetSocketAddress;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

 

import cn.toto.rpc.protocal.ClientNamenodeProtocal;

 

public class HdfsClient {

   

   /**

    * 在使用这个之前,需要先启动服务端

    */

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

      //通过这种方式获取到一个远程调用对象

      ClientNamenodeProtocal nameNode = RPC.getProxy(ClientNamenodeProtocal.class,

                 1L,

                 new InetSocketAddress("localhost",8787),

                 new Configuration());

     

      //调用服务端的接口,看看返回的结果

      String metaData = nameNode.getMetaData("/a.doc");

      System.out.println(metaData);

   }

}

 

输出的结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值