2016-06-30 9 views
0

Sparkアプリケーションのメモリが不足していて、クラスタに約30GのRAMが2つあり、入力データサイズが約数百GBです。Apache Sparkのパーティションが少ないうちにメモリが不足する

アプリケーションはSpark SQLジョブであり、HDFSからデータを読み取り、テーブルを作成してキャッシュした後、Spark SQLクエリを実行してその結果をHDFSに書き戻します。

最初にデータを64個のパーティションに分割し、OOMを取得した後、1024個のパーティションを使用してメモリの問題を修正できました。しかし、なぜより多くのパーティションを使用するとOOMの問題を解決するのに役立ちましたか?

答えて

1

大きなデータに対する解決方法は、パーティション分割(分割と征服)です。すべてのデータがメモリに収まるとは限らず、単一のマシンで処理することもできないためです。

各パーティションは、メモリに収まり、比較的短時間で処理(マップ)できます。パーティションごとにデータが処理された後。合併する必要があります。これは伝統ですmap reduce

データを複数のパーティションに分割するということは、各パーティションが小さくなることを意味します。

[編集]

スパーク弾力性のある分散型データセット(RDD)と呼ばれる回転概念を使用して。

  • 変換とアクトン
  • 変換は別のRDDからマッピングされた操作の2種類があります。それは怠惰な評価です。それらのRDDは、私たちが望みたくない中間結果として扱うことができます。
  • 実際にデータを取得する場合は、アクションが使用されます。これらのRDD /データは、最善を尽くすように、私たちが望むものとして扱うことができます。
  • Sparkはすべての操作を分析し、実行前にDAG(Directed Acyclic Graph)を作成します。
  • アクションが起動されたときにソースRDDから計算されるスパーク開始。その後、それを忘れてください。

Spark DAG

私はYouTubeのSpark Makes Big Data Sparking上のプレゼンテーションのための小さなスクリーンキャストを作りました。

+0

各パーティションのサイズは小さいですが、私はRDDをキャッシュしているので(ポストでこれを言及しておきます)、これらのパーティションはメモリに残っているはずです。したがって、パーティションの数に関係なく、メモリ内のデータのサイズは同じでなければなりません – elgoog

関連する問題