2017-02-27 8 views
0

私は、統計を使って一連の結果を生成するSparkジョブを持っています。私の作業項目数はスレーブ数以上です。だから私はスレーブごとに複数の処理をしています。Sparkワーカープロセス内にファイルを書き込む

I cache結果は、複数の書き込み操作(結果オブジェクト用と統計用)のため、再利用できるオブジェクトを生成した後の結果です。どちらの書き込み操作もsaveAsHadoopFileを使用します。

キャッシングなし各書き込み操作ごとにジョブを再実行し、それは長い時間がかかり、同じ実行を2回やり直しています(さらに書き込みがあった場合はさらに多くなります)。

キャッシュするとメモリ制限にぶつかります。以前計算された結果の一部はキャッシング中に失われ、"CacheManager:58 - Partition rdd_1_0 not found, computing it"というメッセージが表示されます。 Sparkは結果をキャッシュに入れていくうちに、最終的に無限ループに陥ります。

私はSparkにキャッシュのストレージレベルが異なることに気付いています。メモリ+ディスクを使用すると、私たちの問題が解決されます。しかし、RDDオブジェクトを生成せずに、作業者にファイルを書き留めることができるかどうかは疑問です。私はそれが可能かどうかは分かりません。それは...ですか?

答えて

0

Sparkワーカープロセス内にファイルを書き込むことは、Javaプロセスでファイルを書き込むことと変わりません。書き込み操作では、ファイルをシリアル化してHDFSに保存する機能を作成するだけで済みます。 This questionには、それを行う方法に関するいくつかの回答があります。

saveAsHadoopFileは、それを行うのに便利な方法です。

関連する問題