当前位置:   article > 正文

Hadoop之——RPC通信实例_hadoop rpc通信实验

hadoop rpc通信实验
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45922715

一、 RPC(remote procedure call)

  不同java进程间的对象方法的调用。
  一方称作服务端(server),一方称作客户端(client)。
  server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端。
  RPC是hadoop框架运行的基础。

二、通过rpc小例子获得的认识

      1.服务端提供的对象必须是一个接口,接口extends VersioinedProtocal

      2.客户端能够的对象中的方法必须位于对象的接口中。

三、RPC实例

     1、创建MyBiz接口,此接口继承hadoop中的VersionedProtocol接口
  1. package com.lyz.hadoop.rpc;
  2. import org.apache.hadoop.ipc.VersionedProtocol;
  3. /**
  4. * 设置代理对象的返回值必须为接口类型
  5. * 此接口用于接收RPC客户端创建代理对象的返回值
  6. * @author liuyazhuang
  7. *
  8. */
  9. public interface MyBiz extends VersionedProtocol{
  10. /**
  11. * 定义的接口
  12. * @param name
  13. * @return
  14. */
  15. public String hello(String name);
  16. /**
  17. * 版本号
  18. */
  19. long VERSION = 1001;
  20. }
    2、创建MyBiz接口的实现类MyBizImpl

  1. package com.lyz.hadoop.rpc;
  2. import java.io.IOException;
  3. /**
  4. * MyBiz接口的实现类
  5. * @author liuyazhuang
  6. *
  7. */
  8. public class MyBizImpl implements MyBiz {
  9. @Override
  10. public long getProtocolVersion(String protocol, long clientVersion)
  11. throws IOException {
  12. return MyBiz.VERSION;
  13. }
  14. @Override
  15. public String hello(String name){
  16. System.out.println("服务端被调用了");
  17. return "hello "+name;
  18. }
  19. }
    3、创建RPC服务端
  1. package com.lyz.hadoop.rpc;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.ipc.RPC;
  4. import org.apache.hadoop.ipc.RPC.Server;
  5. /**
  6. * RPC服务端
  7. * @author liuyazhuang
  8. *
  9. */
  10. public class MyServer {
  11. public static final String SERVER_ADDRESS = "localhost";
  12. public static final int SERVER_PORT = 12345;
  13. public static void main(String[] args) throws Exception {
  14. /**
  15. * 构造一个rpc server
  16. * @param instance:实例中的方法会被客户端调用
  17. * @param bindAddress:绑定的地址用于监听连接
  18. * @param port:绑定的端口用于监听连接
  19. * @param conf:the Configuration to use
  20. */
  21. Server server = RPC.getServer(new MyBizImpl(), SERVER_ADDRESS, SERVER_PORT, new Configuration());
  22. server.start();
  23. }
  24. }
     4、创建RPC客户端
  1. package com.lyz.hadoop.rpc;
  2. import java.net.InetSocketAddress;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.ipc.RPC;
  5. /**
  6. * RPC客户端
  7. * @author liuyazhuang
  8. *
  9. */
  10. public class MyClient {
  11. public static void main(String[] args) throws Exception {
  12. MyBiz proxy = (MyBiz) RPC.waitForProxy(MyBiz.class,
  13. MyBiz.VERSION,
  14. new InetSocketAddress(MyServer.SERVER_ADDRESS, MyServer.SERVER_PORT),
  15. new Configuration());
  16. String result = proxy.hello("world");
  17. System.out.println("客户端的调用结果为:"+result);
  18. RPC.stopProxy(proxy);
  19. }
  20. }
  5、 注意:下图中1和2位置处的版本号必须相同

  

注意:调用方(也可以称为客户端)也必须有和服务端一样的一个接口,代码一致,且所在包也需得一致(实测如果包名不一致的话,会报org.apache.hadoop.ipc.RpcServerException): Unknown protocol 异常)


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/876668
推荐阅读
相关标签
  

闽ICP备14008679号