私は、統計を使って一連の結果を生成するSparkジョブを持っています。私の作業項目数はスレーブ数以上です。だから私はスレーブごとに複数の処理をしています。Sparkワーカープロセス内にファイルを書き込む
I cache
結果は、複数の書き込み操作(結果オブジェクト用と統計用)のため、再利用できるオブジェクトを生成した後の結果です。どちらの書き込み操作もsaveAsHadoopFile
を使用します。
キャッシングなし各書き込み操作ごとにジョブを再実行し、それは長い時間がかかり、同じ実行を2回やり直しています(さらに書き込みがあった場合はさらに多くなります)。
キャッシュするとメモリ制限にぶつかります。以前計算された結果の一部はキャッシング中に失われ、"CacheManager:58 - Partition rdd_1_0 not found, computing it"
というメッセージが表示されます。 Sparkは結果をキャッシュに入れていくうちに、最終的に無限ループに陥ります。
私はSparkにキャッシュのストレージレベルが異なることに気付いています。メモリ+ディスクを使用すると、私たちの問題が解決されます。しかし、RDD
オブジェクトを生成せずに、作業者にファイルを書き留めることができるかどうかは疑問です。私はそれが可能かどうかは分かりません。それは...ですか?