40

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


3 台のマシンを含む Spark スタンドアロン クラスターがあり、そのすべてに Spark 1.6.1 がインストールされています。

  • マスター マシン。アプリケーションを実行する場所でもあります。spark-submit
  • 2 台の同一のワーカー マシン

Spark Documentationから、次を読みました。

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

ただし、これを読んでも実際の違いはよくわかりません。また、さまざまな展開モードの長所と短所がわかりません。

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

コンテキスト UI

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

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

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

4

3 に答える 3

68

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

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

クライアント:

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

集まる:

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

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

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

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

/bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]
于 2016-05-04T12:53:00.467 に答える