Hadoop之YARN的RPC實操

YARN與RPC

思路:
1、定義接口協議
2、定義接口實現類
3、定義Server端
4、定義Client端

pom.xml如下(自己maven庫裏引,如果maven連接有問題就下載下來jar包手動引入)

<dependencies>
	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-common</artifactId>
	<version>2.7.3</version>
	</dependency>
	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-hdfs</artifactId>
		<version>2.7.3</version>
	</dependency>
	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-mapreduce-client-common</artifactId>
		<version>2.7.3</version>
	</dependency>
	<dependency>
		<groupId>org.apache.hadoop</groupId>
		<artifactId>hadoop-mapreduce-client-core</artifactId>
		<version>2.7.3</version>
	</dependency>
</dependencies>
1.定義接口協議-RpcProtocol.java
package demo01;

import org.apache.hadoop.ipc.VersionedProtocol;

//1.定義接口協議(相當於銀行辦理業務的窗口),必須繼承VersionedProtocol——————接口方法
public interface RpcProtocol extends VersionedProtocol {
    //定義協議版本號
    public static final long versionID=10L;
    //添加自定義方法
    public void say(String word);
    public int add(int v1, int v2);
}

2.定義接口實現類-RpcProtocolImpl.java
package demo01;

import org.apache.hadoop.ipc.ProtocolSignature;

import java.io.IOException;

//2.定義接口實現類(銀行窗口後的某個功能的業務員)
public class RpcProtocolImpl implements RpcProtocol {

    @Override
    public void say(String word) {
        System.out.println("客服:您好,請問有什麼需要幫助的?\n" + "客戶:" + word);

    }

    @Override
    public int add(int v1, int v2) {
        System.out.println("客服:稍等正在辦理中......");
        System.out.println("客服:稍等正在計算中......");
        int sum = v1+v2;
        System.out.println("客服:計算完畢,結果爲:"+sum);
        return sum;
    }

    @Override
    public long getProtocolVersion(String s, long l) throws IOException {
        return RpcProtocol.versionID;
    }

    @Override
    public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {
        return new ProtocolSignature(RpcProtocol.versionID,null);
    }
}

3.定義Server端-RpcServer.java
package demo01;

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

import java.io.IOException;
import java.util.Arrays;

//3.定義個RPC服務器
public class RpcServer {
    public static void main(String[] args) throws IOException {
        RPC.Server server = new RPC.Builder(new Configuration())
                .setProtocol(RpcProtocol.class)
                .setInstance(new RpcProtocolImpl())
                .setBindAddress("localhost")//定義地址爲本機
                .setPort(10000)//定義端口號
                .build();

        server.start();//啓動服務
        System.out.println("Rpc服務正在運行");
    }
}

4.定義Client端-RpcClient.java
package demo01;

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

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

//4.定義一個rpc的客戶端
public class RpcClient {
    public static void main(String[] args) throws IOException {
        //獲取客戶端方面的代理對象
        RpcProtocol proxy = RPC.getProxy(
                RpcProtocol.class,
                RpcProtocol.versionID,
                new InetSocketAddress("localhost", 10000),
                new Configuration());
        //通過代理對象實現客戶端的真正意圖(調用方法)
        proxy.say("請幫我計算當前賬戶與之前賬戶的總金額是多少?");
        int sum = proxy.add(103041,335897);
        System.out.println("客戶總金額爲: "+sum);
    }
}

5.運行結果

1.啓動server
在這裏插入圖片描述
2.啓動client
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章