2016-07-08 4 views
1

私は3つのノードからなるクラスタを持っており、それぞれ12コアと30G、20G、10GのRAMを持っています。私がアプリケーションを走らせると、エクゼキュータのメモリを20Gに設定しています。これは、スレーブのメモリのしきい値を超えているため、10Gマシンでエグゼキュータを起動できないようにします。私は検索しましたが、エグゼキュータのメモリをノードの容量に基づいて動的に設定する方法が見つかりませんでした。クラスタのリソースを完全に利用するために、クラスタまたはSparkジョブをどのように設定できますか?スタンドアロンモードの異機種クラスタでSparkを実行する

答えて

1

解決策は、より少ないメモリでエグゼキュータを増やすことです。 6-10Gエグゼキュータを使用すると、すべてのメモリを使用できます(10Gノードで1、20Gノードで2、30Gノードで3)。または、12〜5Gエグゼクティブを持つことによって。

+0

AFAIKは、スタンドアロンモードでエグゼキュータの数を設定する唯一の方法は 'spark.executor.cores'を設定することです。これはすべてのノードで固定値です。つまり、この設定の同じ値が適用されますそれらが持っているコアに関係なくクラスタのすべてのマシンに、私は3に設定した場合、私は12/3 = 4各マシン上のエグゼキュータで終わりますが、同じ量のメモリを総称して使用します。スタンドアロンモードでエグゼキュータの数を設定する別の方法はありますか? – elgoog

+1

ああ、私は各ノードに12個のコアがあることに気づきませんでした。その場合は、未使用のメモリまたは未使用のコアを使用することになります。残念ながら、Sparkエグゼキュータはすべて同一である必要があります。 – David

+0

私はあなたがSpark submitへの引数としてコアの数を渡すことができると思います。 –

関連する問題