web-dev-qa-db-ja.com

Apache Spark:クライアントとクラスターのデプロイモードの違い

TL; DR:Spark=スタンドアロンクラスターでは、クライアントモードとクラスターデプロイモードの違いは何ですか?アプリケーションを実行するモードを設定しますか?


Spark 3台のマシンを備えたスタンドアロンクラスターがあり、そのすべてがSpark 1.6.1:

  • spark-submitを使用してアプリケーションを実行するマスターマシン
  • 2つの同一ワーカーマシン

Spark Documentation から、私は読みました:

(...)スタンドアロンクラスタの場合、Sparkは現在2つのデプロイモードをサポートしています。クライアントモードでは、ドライバはアプリケーションを送信するクライアントと同じプロセスで起動されます。ただし、クラスタモードでは、 、ドライバーはクラスター内のいずれかのワーカープロセスから起動され、クライアントプロセスは、アプリケーションの終了を待たずにアプリケーションを送信する責任を果たすとすぐに終了します。

ただし、これを読んで実際の違いを理解していないため、さまざまな展開モードの長所と短所を理解できません。

さらに、start_submitを使用してアプリケーションを起動すると、プロパティspark.submit.deployModeを「cluster」に設定しても、コンテキストのSpark UIは次のエントリを表示します。

Context UI

したがって、実際の違いを確認するために両方のモードをテストすることはできません。とはいえ、私の質問は次のとおりです。

1)Spark Standaloneclient)展開モードとcluster展開モードの実際の違いは何ですか?それぞれを使用することの長所と短所は何ですか?

2)spark-submitを使用して、アプリケーションを実行するものを選択するにはどうすればよいですか?

36
Daniel de Paula

Sparkスタンドアロンクライアントデプロイモードとクラスターデプロイモードの実際の違いは何ですか?それぞれを使用することの長所と短所は何ですか?

クライアントモードとクラスターモードの違いを見てみましょう。

クライアント:

  • ドライバーは、専用プロセス内の専用サーバー(マスターノード)で実行されます。これは、作業を実行するために自由に利用可能なすべてのリソースがあることを意味します。
  • ドライバーは専用のNetty HTTPサーバーを開き、指定されたJARファイルをすべてのワーカーノードに配布します(大きな利点)。
  • マスターノードには独自の専用リソースがあるため、ドライバープログラム用のワーカーリソースを「使用」する必要はありません。
  • ドライバープロセスが停止した場合、その実行をリセットするには外部監視システムが必要です。

集まる:

  • ドライバーは、クラスターのいずれかのワーカーノードで実行されます。労働者はマスターリーダーによって選ばれます
  • ドライバーは、専用のスタンドアロンプ​​ロセスとして実行されますワーカー内
  • ドライバープログラムは少なくとも 1コアと、ワーカーの1つからの専用メモリ量を使用します(これは構成可能です)。
  • --superviseフラグを使用して、マスターノードからドライバープログラムを監視し、それが死んだ場合にリセットできます。
  • クラスターモードで作業する場合、アプリケーションの実行に関連するすべてのJARは、すべてのワーカーに公開されている必要があります。これは、各ワーカーの共有場所またはフォルダーに手動で配置できることを意味します。

どちらの方がよいですか?確かではありませんが、実際に実験して決定するのはあなたです。ここでは、これはより良い決定ではありません。前者と後者から物事を得ることができます。どちらがあなたのユースケースに適しているかを見るのはあなた次第です。

spark-submitを使用して、アプリケーションを実行するものを選択する方法

実行するモードを選択する方法は、--deploy-modeフラグを使用することです。 Spark Configuration ページから:

/bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]
53
Yuval Itzchakov

マスターノードにSSHを実行することにより、EMRでspark submitを実行します。オプション--deploy-mode clusterを提供している場合、次のことが起こります。

  1. ターミナルで詳細なログを見ることができなくなります。
  2. ドライバーはマスター自体で作成されないため、ターミナルからジョブを終了することはできません。

ただし、-deploy-modeクライアントの場合:

  1. ターミナルで詳細なログを見ることができます。
  2. 端末自体からジョブを終了できます。

これらは私が今まで気づいた基本的なものです。

2
Suman Sushovan

私も同じシナリオを持っています。ここでは、マスターノードはスタンドアロンのec2クラスターを使用しています。この設定では、クライアントモードが適切です。このドライバーでは、クラスターのクライアントとして機能するspark-submitプロセスで直接起動されます。アプリケーションの入力と出力はコンソールに接続されます。したがって、このモードはREPLを含むアプリケーションに特に適しています。

それ以外の場合、ワーカーマシンから遠く離れたマシンからアプリケーションを送信する場合は、クラスターモードを使用してネットワークレイテンシb/wドライバーおよびエグゼキューターを最小限に抑えることが非常に一般的です。

1
jeevan kishore