spark=のmemory_onlyおよびmemory_and_diskキャッシュレベルの動作はどのように違いますか?
ドキュメンテーションは言う---
ストレージレベル
意味
MEMORY_ONLY
JVMのRDDをデシリアライズされたJavaオブジェクトとして保存します。RDDがメモリに収まらない場合、一部のパーティションはキャッシュされず、必要になるたびにオンザフライで再計算されます。デフォルトのレベル。
MEMORY_AND_DISK
RDDをデシリアライズされたJavaオブジェクトとしてJVMに格納します。RDDがメモリに収まらない場合は、ディスクに収まらないパーティションを格納し、必要に応じてそこから読み込みます。
MEMORY_ONLY_SER
RDDをシリアル化されたJavaオブジェクト(パーティションごとに1バイト配列)として保存します。これは、特に高速シリアライザーを使用する場合は一般にデシリアライズされたオブジェクトよりもスペース効率がよくなりますが、読み取りにCPUが集中します。
MEMORY_AND_DISK_SER
MEMORY_ONLY_SERに似ていますが、必要なたびにオンザフライで再計算するのではなく、メモリに収まらないパーティションをスピルします。
DISK_ONLY
RDDパーティションはディスクのみに保存してください。
MEMORY_ONLY_2、MEMORY_AND_DISK_2など.
上記のレベルと同じですが、2つのクラスターノードで各パーティションを複製します。
OFF_HEAP(実験的)
TachyonにRDDをシリアル形式で保存します。 MEMORY_ONLY_SERと比較して、OFF_HEAPはガベージコレクションのオーバーヘッドを削減し、エグゼキューターを小さくしてメモリプールを共有できるため、大きなヒープまたは複数の同時アプリケーションがある環境で魅力的です。さらに、RDDはTachyonにあるため、エグゼキューターがクラッシュしてもメモリ内キャッシュが失われることはありません。このモードでは、Tachyonのメモリは破棄可能です。したがって、Tachyonはメモリから削除するブロックを再構築しようとしません。
つまり、メモリのみの場合、sparkは常にメモリにパーティションを保持しようとします。一部のパーティションをメモリに保持できない場合、またはノードが失われた場合、RAMからパーティションが削除されますsparkは系統情報を使用して再計算します。メモリおよびディスクレベルでは、sparkは常にパーティションを計算およびキャッシュします。RAMに保持しようとしますが、そうする場合は適合しない場合、パーティションはディスクに流出します。
documentation で説明したように、効率の観点からの永続性レベル:
レベルスペース使用CPU時間メモリ内ディスクオンシリアル化 ------------------------------ ------------------------------------------- MEMORY_ONLY High低YNN MEMORY_ONLY_SER低高YNY MEMORY_AND_DISK高中いくつかのいくつか MEMORY_AND_DISK_SER低高いくつかのY DISK_ONLY低高NYY
MEMORY_AND_DISK
およびMEMORY_AND_DISK_SER
メモリに収まらないデータが多すぎる場合は、ディスクに流出します。