2017-03-24 2 views
0

これは私の問題です。長期的なPySparkフレームワークを持っているとしましょう。すべてのタスクを並行して実行できる何千ものタスクがあります。私は多くの異なるホストで最初に1,000コアを割り当てられます。各タスクには1つのコアが必要です。次に、それらが終了すると、ホストは1つのコアを保持し、アクティブなタスクはありません。多数のホストが存在するため、アクティブなタスクを持たないエグゼキュータに、より多くの割合のコアが割り当てられます。だから私は1000のコアが割り当てられることができますが、わずか100アクティブなタスク。他の900個のコアは、アクティブなタスクを持たないエグゼキュータに割り当てられます。これをどのように改善できますか?実行していないエグゼキュータをシャットダウンする方法はありますか?私は現在PySpark 1.2を使用していますので、そのバージョンの機能は素晴らしいですが、新しいバージョンでは解決策(またはより良い解決策)について聞いてうれしいです。ありがとう!一見、非アクティブなエグゼキュータを長時間実行しているPySparkフレームワークから解放するには?

+0

リソースマネージャを使用していますか?またはスパークスタンドアロン? – timchap

答えて

0

Sparkが使用すべきエグゼキュータの数を指定しない場合、Sparkは少なくとも1つのタスクがそのキューに保留中である限りエグゼキュータを割り当てます。 Sparkが動的に割り当てることができるエグゼキュータの数に上限を設定するには、spark.dynamicAllocation.maxExecutorsを使用します。他の言葉で

、スパーク、使用進水: pyspark --master yarn-client --conf spark.dynamicAllocation.maxExecutors=1000 代わりpyspark --master yarn-client --num-executors=1000

のデフォルトでは、スパークは、非活動の60s後に執行を解放します。

ご使用のSpark.DataFrameが.persist()の場合は、.unpersist()にしてください。さもなければ、Sparkはエグゼキュータを解放しません。

+0

QAはYARNを使用していることを指定していません。 – timchap

関連する問題