2016-03-24 11 views
1

私はスタンドアロンのクラスタを作成し、私のアプリケーションを処理する最速の方法を探したかったのです。 私のマシンには12gのRAMがあります。私が試した結果がここにあります。スパークの実行ファイルのメモリ設定

Test A (took 15mins) 
1 worker node 
spark.executor.memory = 8g 
spark.driver.memory = 6g 

Test B(took 8mins) 
2 worker nodes 
spark.executor.memory = 4g 
spark.driver.memory = 6g 

Test C(took 6mins) 
2 worker nodes 
spark.executor.memory = 6g 
spark.driver.memory = 6g 

Test D(took 6mins) 
3 worker nodes 
spark.executor.memory = 4g 
spark.driver.memory = 6g 

Test E(took 6mins) 
3 worker nodes 
spark.executor.memory = 6g 
spark.driver.memory = 6g 
  1. 試験Aと比較して、試験Bはちょうど作られたものよりwoker(同じメモリは4×2 = 8を費やす)が、これは、高速アプリケーションを作りました。それはなぜ起こったのですか?
  2. テストC、D、Eは、それよりもはるかに多くのメモリを消費しようとしました。しかしそれはより速く働いた。メモリのエッジを制限するための設定メモリサイズですか?
  3. これは、ワーカーノードを追加するだけの速度ではありません。作業者とエグゼキュータのメモリサイズの利益数をどのように知るべきですか?
+0

すぐに質問するたびにクラスタを再起動しましたか?キャッシングが後続のパフォーマンスの向上を改善しているかどうかは疑問です。 –

+0

@charlesgomesが本当に再起動する必要がありますか?実際の測定試行の前に各シナリオを1回または2回実行するとどうなりますか? – mauriciojost

+0

マスターとワーカーは 'bin/spark-class'で始まりました。私はちょうど 'bin/spark-submit'でクラスタを再割り当てしました –

答えて

1

TestBでは、アプリケーションは2つのCPUで並列に実行されていたため、合計時間はほぼ半分でした。

メモリの設定についてはメモリの上限を設定しています。アプリでさらにGCを実行し、最終的にヒープがいっぱいになると、OutOfMemoryExceptionが届きます。

最も適切な構成については、それは異なります。あなたのタスクが多量のRAMを消費しない場合は、CPUと同じくらいエグゼキュータを持つようにSparkを設定してください。 それ以外の場合は、必要なRAMの量に合わせてエグゼキュータを設定します。 これらの制限は一定である必要はなく、アプリケーション要件によって変更される可能性があることに注意してください。

+0

OutOfMemoryExceptionエラーは実行メモリから来ますか?またはドライバメモリ? –

+1

データを解析する部分であるため、エグゼキュータから来る可能性が高くなります。 – imriqwe

+0

ドライバのメモリとは何ですか?私はそれが起源のデータとRDDのための完全に処理されたデータです。 –

関連する問題