2016-04-06 47 views
1

我想了解Apache Spark如何在幕後工作。在Spark中編碼一點之後,我很確定它實現了RDD作爲RMI 遠程對象,不是嗎?Apache Spark和遠程方法調用

以這種方式,它可以在轉換內部修改它們,如map s,flatMap s等等。不屬於RDD的對象只是簡單地序列化並在執行期間發送給工作人員。

在下面的例子中,linestokens將被視爲遠程對象,而串toFind將簡單地串行化並將其複製到工人。

val lines: RDD[String] = sc.textFile("large_file.txt") 
val toFind = "Some cool string" 
val tokens = 
    lines.flatMap(_ split " ") 
     .filter(_.contains(toFind)) 

我錯了嗎?我google了一下,但我還沒有找到任何有關如何在內部實施Spark RDD的參考。

+0

您可以查看源代碼[Scala的RDD](https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala) 。 –

+0

@AlbertoBonsanto,你是對的。但'RDD.scala'文件有超過1800個sloc :) –

回答

1

你是對的。 Spark序列化閉包以執行遠程方法調用。

+0

你能給我一些資源來閱讀這個話題嗎? –

+0

我直接詢問了Roland Kuhn Spark或Akka是否直接使用RMI,他回答我:「沒有任何適合的反應性解決方案使用RMI,該技術已過時(搜索透明遠程處理和位置透明性之間的區別)。 Spark並不以您想的方式執行遠程調用,這會使其速度降低數量級,而是將代碼序列化並將其發送給工作節點。「這基本上是你已經回答的。 –