Hadoop的 RPC机制的使用

1.RPC 概念
RPC:远程过程调用
(1)它允许一台计算机调用另一台计算机的子程序,不用关心底层网络通信细节,通常使用在分布式网络通信中。
(2)Hadoop 进程之间交互都是通过 RPC 来进行的,如 Namenode 与 Datanode 直接通信,jobtacker 与 Tasktracker 之间。
2.RPC 的特点
(1)透明性:远程调用其他机器的程序
(2)高性能:Server 并发处理来自多个 Client 的请求
(3)可控性:Java 中已经提供一个 RPC 框架,但是 Hadoop RPC 实现自定义的 RPC 框架
3.定义一个RPC通信接口。

/**
 * Created by hubo on 2017/11/30
 * 定义一个 RPC 通信接口
 */
public interface LoginServiceProtocal {

    final long versionID = 1L;  //版本号,不同版本号的 client 和 server 之间不能通信
    String login(String username, String password);

}

默认情况下,不同版本号的RPC Client和Server之间不能相互通信,因此客户端和服务端通过版本号标识。VERSION 就是版本号。
4.实现 RPC 协议
RPC 协议通常是一个 Java 接口,用户实现接口方法:

/**
 * Created by hubo on 2017/11/30
 */
public class LoginService implements LoginServiceProtocal{

    @Override
    public String login(String username,String password){
        return "成功调用";
    }

}

5.构造 RPC server 并启动服务

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.Server;

import java.io.IOException;

/**
 * Created by hubo on 2017/11/30
 */
public class ServicePublisher {

    public static int PORT = 5432;
    public static String IPAddress = "127.0.0.1";

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

        Configuration conf = new Configuration();

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

        builder.setBindAddress(IPAddress)
                .setPort(PORT)
                .setProtocol(LoginServiceProtocal.class)
                .setInstance(new LoginService());

        Server server = builder.build();    //创建 sorck 服务器

        server.start();

    }
}
主要是创建的 RPC.Builder

6.构造 RPC Client 并发出请求

import HadoopRPC.LoginServiceProtocal;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

import java.io.IOException;
import java.net.InetSocketAddress;

/**
 * Created by hubo on 2017/11/30
 */
public class ClientDemo {
    public static int PORT = 5432;
    public static String IPAddress = "127.0.0.1";
    public static void main(String[] args) throws IOException {

        LoginServiceProtocal loginService =
                RPC.getProxy
                        (LoginServiceProtocal.class,
                        1L,
                        new InetSocketAddress(IPAddress,PORT),
                        new Configuration());

        String result = loginService.login("angloaksd","1314521");

        System.out.println(result);
    }
}

7.查看运行结果
(1)启动服务端,开始监听客户端请求
这里写图片描述
可以查看多出一个进程15411就是服务端启动成功
这里写图片描述
(2)启动客户端查看是否调用
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值