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