2015-01-13 19 views

答えて

3

いいえ、RDDは1つのSparkContextに結び付けられています。一般的な考え方は、Sparkクラスターと、クラスターに何をすべきかを伝える1つのドライバープログラムがあることです。このドライバにはSparkContextがあり、RDDで操作を開始します。

RDDをあるドライバプログラムから別のドライバプログラムに移動する場合は、最初のドライバのディスク(S3/HDFS/...)に書き込んで、もう一方のドライバのディスクから読み込みます。

11

Daniel Darabosがすでに述べたように、それは不可能です。 Sparkのすべての分散オブジェクトは、それを作成するために使用された特定のコンテキストにバインドされています(データセットの場合はSQLContextSparkContext RDDの場合。アプリケーション間でオブジェクトを共有する場合は、共有コンテキストを使用する必要があります(たとえば、spark-jobserverLivy、またはApache Zeppelinを参照)。 RDDまたはDataFrameはちょうど小さなローカルオブジェクトなので、実際に共有することはあまりありません。

データの共有はまったく別の問題です。特殊なメモリキャッシュ(Apache Ignite)やメモリファイルシステム(Alluxio - 旧Tachyonなど)を使用すると、アプリケーション間の切り替え時のレイテンシを最小限に抑えることができますが、実際には回避することはできません。

0

私の理解では、RDDはデータではありませんが、元のデータから変換/フィルタを介してデータを作成する方法です。

別の考え方ではなく、最終的なデータを共有することです。だから、あなたのような、データ・ストアにRDDを格納します: - HDFS(寄木細工のファイルなど。) - Elasticsearch - (インメモリ)のApacheのIgnite

私は、あなたは、ApacheのIgniteを愛すると思います:https://ignite.apache.org/features/igniterdd.html

アパッチのIgniteは、同じアプリケーション内で、または異なるスパーク アプリケーション間のいずれかで、容易に複数のスパーク ジョブを横切って、メモリ内の状態を共有することを可能にするスパークRDD抽象 の実装を提供します。

IgniteRDDが実装され 、処理を実行するスパークジョブ内またはスパークワーカーに、またはそれ自身のクラスタ内のいずれかで配備することができる分散型のIgniteキャッシュ、 上図のようになります。

(私はあなたが探しているものを見つけるために彼らのドキュメントを掘るしましょう。)

関連する問題