LoginSignup
0
0

More than 5 years have passed since last update.

Apache spark RDD キャッシュ時の StorageLevel について

Last updated at Posted at 2018-11-10
RDDをキャッシュするメリット

そのRDDに対してアクションを複数回呼ぶ場合、キャッシュから読み込むため、再計算する必要がなくなる。

すべてのRDDは常にキャッシュするべきか? -> いいえ
  • 一度しかアクションされないRDDをキャッシュする意味がない
  • 複数回アクションされる場合でも、再計算する方が低コストになる場合も
キャッシュを持つノードが障害が発生した場合は?
  • 再計算される(仮にそのキャッシュが既に不要の場合、無駄な再計算になりそう)
  • MEMORY_AND_DISK_2 のように、複数台でキャッシュするようにしておけば、再計算を避けられる
StorageLevel 一覧
StorageLevel 永続先 シリアライズ メリット デメリット
NONE なし なし メモリ・ディスク領域消費しない アクションの毎に再計算
MEMORY_ONLY メモリ なし レイテンシ低い メモリ消費量多い(GCのオーバーヘッド高)
MEMORY_ONLY_SER メモリ あり メモリ消費量少ない シリアライズのオーバーヘッド(CPU負荷)高 
DISK_ONLY ディスク なし メモリ消費しない レイテンシ高い
MEMORY_AND_DISK メモリとディスク なし レイテンシ低い メモリ消費量多い(GCのオーバーヘッド高)
MEMORY_AND_DISK_SER メモリとディスク あり メモリ消費量少ない シリアライズのオーバーヘッド(CPU負荷)高
OFF_HEAP Tachyonファイルシステム(メモリ上) あり GC発生しない Tachyon要インストール、実績少ない?
どの StorageLevel を選択するべきか?

対象のRDDが何度アクションを呼び出されるのか、どのようなアクションなのか、どの程度のサイズになるのか、などに依存する。
とにかく再計算を避けたいのであれば、MEMORY_AND_DISK を選択するのが無難なようにも思えるが、実はトータル的にはパフォーマンスを低下している可能性も考えておく。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0