您好,登錄后才能下訂單哦!
[toc]
在Hadoop中提供了RPC服務(wù)的使用API,通過(guò)其API地使用,可以非常簡(jiǎn)單地構(gòu)建遠(yuǎn)程過(guò)程調(diào)用程序,下面就給出一個(gè)簡(jiǎn)單的實(shí)例。
為了方便操作,所有的代碼都放在本地一個(gè)項(xiàng)目中,實(shí)際上,完全可以將代碼放在不同的服務(wù)器上,這是RPC的概念,這里就不做過(guò)多的介紹。
項(xiàng)目結(jié)構(gòu)如下:
rpc/
├── HelloServiceImpl.java
├── IHelloService.java
├── RPCClientDriver.java
└── RPCServerDriver.java
這里只是做一個(gè)簡(jiǎn)單的示例,并且代碼中也給出了非常詳細(xì)的注釋?zhuān)灾苯咏o出程序代碼。
package com.uplooking.bigdata.rpc;
import org.apache.hadoop.ipc.VersionedProtocol;
/**
* 接口
* 要想使用hadoop提供的RPC服務(wù),必須要繼承VersionedProtocol
*/
public interface IHelloService extends VersionedProtocol {
public long versionID = 1L;
public String sayHi(String name);
public String hearBeat(String beat);
}
package com.uplooking.bigdata.rpc;
import org.apache.hadoop.ipc.ProtocolSignature;
import java.io.IOException;
/**
* HelloService服務(wù)實(shí)現(xiàn)類(lèi)
*/
public class HelloServiceImpl implements IHelloService {
public String sayHi(String name) {
System.out.println("name..." + name);
return "Hi, " + name;
}
public String hearBeat(String beat) {
System.out.println("----heartbeat----" + beat);
return System.currentTimeMillis() + "--->" + beat;
}
public long getProtocolVersion(String protocol, long clientVersion) throws IOException {
return versionID;
}
public ProtocolSignature getProtocolSignature(String protocol, long clientVersion, int clientMethodsHash) throws IOException {
return new ProtocolSignature();
}
}
package com.uplooking.bigdata.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
/**
* RPC服務(wù)端程序,啟動(dòng)并發(fā)布服務(wù)
*/
public class RPCServerDriver {
public static void main(String[] args) throws IOException {
// 創(chuàng)建RPC的配置
Configuration configuration = new Configuration();
// 構(gòu)建RPC的builder對(duì)象
RPC.Builder builder = new RPC.Builder(configuration);
// 設(shè)置RPC Server的信息,返回一個(gè)server對(duì)象
RPC.Server server = builder.setBindAddress("localhost")
.setPort(4893)
.setProtocol(IHelloService.class)
.setInstance(new HelloServiceImpl())
.build();
// 啟動(dòng)RPC Server
// 這是一個(gè)守護(hù)進(jìn)程,所以main函數(shù)不會(huì)退出
server.start();
System.out.println("---服務(wù)啟動(dòng)了---");
}
}
package com.uplooking.bigdata.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
/**
* RPC客戶端程序
*/
public class RPCClientDriver {
public static void main(String[] args) throws IOException {
// 構(gòu)建InetSocketAddress對(duì)象
InetSocketAddress address = new InetSocketAddress(InetAddress.getByName("localhost"), 4893);
// 通過(guò)RPC.getProxy方法獲得代理對(duì)象
/**
* @param protocol 接口的類(lèi)型對(duì)象
* @param clientVersion 版本號(hào)
* @param addr 服務(wù)端地址
* @param conf 配置信息
*/
IHelloService helloServiceProxy = RPC.getProxy(IHelloService.class, IHelloService.versionID, address, new Configuration());
String result = helloServiceProxy.sayHi("小秋田");
System.out.println(result);
}
}
啟動(dòng)RPCServerDriver,輸出如下:
---服務(wù)啟動(dòng)了---
啟動(dòng)RPCClicentDriver,輸出如下:
Hi, 小秋田
此時(shí)再查看服務(wù)端的輸出:
---服務(wù)啟動(dòng)了---
name...小秋田
這樣的話,通過(guò)使用Hadoop提供的RPC API,就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的RPC程序。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。