3

2 つの EC2 インスタンス (m4.xlarge) を持つ小さな Spark クラスターを実行しています。

これまでのところ、1 つのノードで spark マスターを実行し、もう 1 つのノードで 1 つの spark スレーブ (4 コア、16g メモリ) を実行してから、spark (ストリーミング) アプリをクライアント デプロイ モードでマスターにデプロイしました。設定の概要は次のとおりです。

--executor-memory 16g

--executor-cores 4

-- ドライバメモリ 8g

-- ドライバーコア 2

-- 展開モードのクライアント

これにより、4 つのコアと 16Gb のメモリで実行されている単一のスレーブ上に単一のエグゼキュータが作成されます。ドライバーは、マスターノードのクラスターの「外部」で実行されます (つまり、マスターによってリソースが割り当てられません)。

理想的には、監視オプションを利用できるように、クラスター展開モードを使用したいと考えています。マスター ノードで 2 番目のスレーブを開始し、2 つのコアと 8g のメモリを割り当てました (マスター デーモン用のスペースを確保するために割り当てられたリソースを小さくしました)。

Spark ジョブをクラスター デプロイ モードで実行すると (上記と同じ設定を使用しますが、--deploy-mode クラスターを使用します)。約 50% の時間で、ドライバーがマスター ノード (2 コアと 8Gb の適切なリソースを持つ) で実行されているスレーブを介して実行され、元のスレーブ ノードに 4 のエグゼキューターを割り当てる自由を与えるという目的の展開が得られます。コア & 16Gb。ただし、残りの 50% の時間は、マスターが非マスター スレーブ ノードでドライバーを実行します。つまり、そのノードで 2 コアと 8Gb メモリを備えたドライバーを取得することになり、エグゼキューターを起動するのに十分なリソースを持つノードが残りません (これには 4 コアと 16Gb が必要です)。

Spark マスターがドライバーに特定のワーカー/スレーブを使用するように強制する方法はありますか? Spark が 2 つのスレーブ ノード (1 つは 2 コア、もう 1 つは 4 コア) があり、私のドライバーには 2 つのコアが必要であり、私のエグゼキューターには 4 つのコアが必要であることを知っているとすれば、適切な最適な配置を理想的にはうまくいくでしょうが、これはそうではありません。そのようです。

どんなアイデアや提案もありがたく受け取った!

ありがとう!

4

1 に答える 1