2016-04-06 8 views
1

Ich versuche zu verstehen, wie Apache Spark hinter den Kulissen arbeitet. Nach der Codierung ein wenig in Spark bin ich ziemlich sicher, dass es implementiert als RMI Remote-Objekte, nicht wahr?Apache Spark und Remote Method Invocation

Auf diese Weise kann es sie innerhalb der Transformation ändern, wie map s, flatMap s, und so weiter. Objekte, die nicht Teil einer sind, werden einfach serialisiert und während der Ausführung an einen Arbeiter gesendet.

Im Beispiel unten, lines und tokens als entfernte Objekte, behandelt werden, während die Saite toFind einfach serialisiert und an die Arbeiter kopiert werden.

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

Bin ich falsch? Ich habe ein wenig gegoogelt, aber ich habe keinen Hinweis darauf gefunden, wie Spark intern implementiert ist.

+0

Sie können den Quellcode [Scala RDD] (https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala) überprüfen . –

+0

@ AlbertoBonsanto, du hast Recht. Aber die 'RDD.scala' Datei hat mehr als 1800 Sloc :) –

Antwort

1

Sie haben Recht. Spark serialisiert Closures, um Remote-Methodenaufrufe durchzuführen.

+0

Können Sie mir einige Ressourcen geben, um zu dem Thema zu lesen? –

+0

Ich habe Roland Kuhn direkt gefragt, ob Spark oder Akka direkt RMI verwendet und er antwortet mir: "Keine der reaktiven Lösungen nutzt RMI, diese Technik ist obsolet (Suche nach dem Unterschied zwischen transparenter Remotierung und Standorttransparenz) Spark führt Remote-Aufrufe nicht in der Art und Weise aus, wie Sie denken, das würde sie um Größenordnungen verlangsamen. Stattdessen serialisiert es den Code und sendet diesen an die Worker-Knoten. " Dies ist im Wesentlichen das, was Sie beantwortet haben. –