hadoop IPC/RPC 機制

 

在分佈式應用程序中使用Hadoop IPC/RPC

原文地址:http://www.supermind.org/blog/520/using-hadoop-ipcrpc-for-distributed-applications

本文來自於:http://gpcuster.cnblogs.com

譯文:

關於Hadoop IPC

我們一起來了解Hadoop IPC,這是一個內進程間通信(Inter-Process Communication)的子系統。Hadoop IPC被用於在一個進程的程序與另一個進程的程序進行通信

Hadoop IPC
1.與SOAP和XML-RPC不同,Hadoop IPC使用java中的DataOutputStream與DataInputStream進行二進制的序列化。
2. 它是一個簡潔的,低消耗的RPC機制。
3. 它只支持單播的操作。

爲什麼Hadoop的IPC實現不使用RMI或者是java.io.Serialization呢? 理由摘自what Doug has to say:

在我們開啓Hadoop項目的時候,爲什麼不使用Serialization?因爲當我們需要對對象進行精確的讀和寫操作時,這麼做對似乎過於笨重了。

不適用RMI的理由是類似的。有效的IPC對於Hadoop來說是至關重要的。我覺得我們需要精確控制這些事情,比如連接,超時,緩存等等。而RMI就達不到這些需求。

示例代碼

現在,我們一起來看看Hadoop IPC的示例代碼,看看他們究竟是如何工作的。

一般來說,所有的單播PRC調用都會包含一個客戶端和一個服務端。

創建一個服務端,

Configuration conf = new Configuration();
Server server = RPC.getServer(this, "localhost", 16000, conf);  // start a server on localhost:16000
server.start();

創建一個客戶端,

Configuration conf = new Configuration();
InetSocketAddress addr = new InetSocketAddress("localhost", 16000);  // the server's inetsocketaddress
ClientProtocol client = (ClientProtocol) RPC.waitForProxy(ClientProtocol.class,
    ClientProtocol.versionID, addr, conf);

在這個示例中,服務端的class實現了ClientProtocol接口,ClientProtocol.java代碼看上去是這個樣子的:

interface ClientProtocol extends org.apache.hadoop.ipc.VersionedProtocol {
  public static final long versionID = 1L;
 
  HeartbeatResponse heartbeat();
}

ClientProtocol接口中只定義了一個方法:heartbeat() ,這個方法將返回一個HeartbeatResponse對象。遠程的客戶端通過週期性地調用heartbeat()方法讓服務端了解客戶端的情況。然後服務端返回一個HeartbeatResponse對象,是的客戶端獲得相應的信息。

一個HeartbeatResponse.java代碼看起來是這個樣子的:

public class HeartbeatResponse implements org.apache.hadoop.io.Writable {
  String status;
 
  public void write(DataOutput out) throws IOException {
    UTF8.writeString(out, status);
  }
 
  public void readFields(DataInput in) throws IOException {
    this.status = UTF8.readString(in);
  }
}
總結

對於Hadoop IPC的總結如下: 
1. 服務端實現了ClientProtocol接口。
2. 一個或多個客戶端將調用ClientProtocol接口的方法。
3. 在ClientProtocol接口的方法中所使用的所有參數或對象都需要繼承於org.apache.hadoop.io。

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