2016-05-06 1 views
1

RDDは本質的に系統によってフォールトトレラントです。しかし、アプリケーションに100sの操作がある場合、すべての操作を再構築するのが難しくなります。中間データを保存する方法はありますか? RDDを保持するためのpersist()/ cache()のオプションがあることを理解しています。しかし、彼らは中間データを保持するのに十分ですか?チェックポインティングはオプションになりますか?また、チェックポインティングRDDストレージのレベルを指定します?(などメモリやディスクのような、)アプリケーションに100sの操作がある場合、Sparkに中間データを格納します。

+0

私は 'rdd.checkpoint'あなたがチェックポイント時に –

+0

@TonTorresは、我々はストレージレベルを指定することができます必要なものであると思いますか? –

+0

私が知っていることから、いいえ。 'checkpoint'は' SparkContext#setCheckpointDir'で設定されたチェックポイントディレクトリ内のファイルに保存されます - これは通常HDFSやS3のようなものです。 –

答えて

1

キャッシュながら()が(持続道)があるは、一般的なチェックポイントであることはあるものですストリーミング特有のものです

キャッシング - キャッシュはメモリやディスク

rdd.cache() 

が持続に起こるかもしれない - あなたはどちらかのメモリやディスク

rdd.persist(storage level) 

であなたのデータを永続化するオプションを与えることができますチェックポイント - データを保存する必要があるディレクトリを指定する必要があります(HDFS/S3のような信頼できるストレージ内)

val ssc = new StreamingContext(...) // new context 

ssc.checkpoint(checkpointDirectory) // set checkpoint directory 

キャッシュ/チェックポイントを持続との間に有意な違いがあります。

キャッシュ/持続は、RDDを実体化し、メモリおよび/またはディスクに保持します。しかし、RDDの系統(つまり、RDDを生成した操作のseq)は記憶されます。そのため、ノードに障害があり、キャッシュされたRDDの一部が失われた場合、それらを再生成することができます。

しかし、HDFSファイルにRDDを保存しチェックポイントと、実際に忘れ系譜完全に。これにより、長い系統を切り捨てることができ、データはHDFSに確実に保存されます(複製によって自然にフォールトトレラントになります)。

http://apache-spark-user-list.1001560.n3.nabble.com/checkpoint-and-not-running-out-of-disk-space-td1525.html

(Why) do we need to call cache or persist on a RDD

+0

非常に詳細な応答をありがとう。チェックポインティングがストリーミングのためだけのものである場合、通常のRDDに中間データを格納する方法がありますか?または、唯一の選択肢は残っていますか? –

+0

persistは、中間レベルのデータをディスクに保存するオプションを提供します。 - rdd.persist(MEMORY_AND_DISK)。それはメモリとディスクにデータを保存します。 spark doc - http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence – infiniti

+1

の_checkpointは、streaming_に固有のものです。それ以外のオプションは確認できます。また、Sparkのさまざまな概念(データチェックポイント、メタデータチェックポイント、ローカルチェックポイントなど)についても説明します。 – zero323

関連する問題