web-dev-qa-db-ja.com

sparkのmemory_onlyとmemory_and_diskキャッシュレベルの違いは何ですか?

spark=のmemory_onlyおよびmemory_and_diskキャッシュレベルの動作はどのように違いますか?

19
Sandip

ドキュメンテーションは言う---

ストレージレベル

意味

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に保持しようとしますが、そうする場合は適合しない場合、パーティションはディスクに流出します。

35
ayan guha

documentation で説明したように、効率の観点からの永続性レベル:

レベルスペース使用C​​PU時間メモリ内ディスクオンシリアル化
 ------------------------------ ------------------------------------------- 
 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メモリに収まらないデータが多すぎる場合は、ディスクに流出します。

31
Julina