2016-04-06 13 views
1

Apache Sparkの背後での動作を理解しようとしています。 Sparkで少しコーディングした後、私はそれがRDDをRMIとして実装していることをかなり確信していますリモートオブジェクト、そうですか?Apache Sparkとリモートメソッドの呼び出し

このようにして、maps、flatMapsなどの変換の中でそれらを変更することができます。 RDDの一部ではないオブジェクトは、単にシリアル化され、実行中にワーカーに送信されます。

ストリングtoFindを単にシリアル化と労働者にコピーされながら、以下の例では、linestokensは、リモートオブジェクトとして扱われます。

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

私は間違っていますか?私は少しgoogledしかし、私はスパークRDDが内部的にどのように実装されているかについての参照が見つかりませんでした。

+0

ソースコード[Scala's 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

SparkやAkkaがRMIを直接使用している場合、私はRoland Kuhnに直接尋ねました。彼は私に答えています。「適切なリアクティブソリューションのどれもRMIを使用していません。その技術は古くから使われています(透過的なリモート処理と場所の透過性の違いを探せ)。 Sparkは思ったやり方でリモートコールを実行しません。それは、それを桁違いに遅くするのではなく、コードをシリアル化してワーカーノードに送信します。 "これは根本的にあなたが答えたものです。 –