このドキュメントでは、関連するコンポーネントを理解しやすくするために、Sparkがクラスター上でどのように動作するかの簡単な概 アプリケーション提出ガイドを読むクラスター上でのアプリケーションの起動について学びます。
Sparkアプリケーションは、メインプログラム(ドライバープログラムと呼ばれる)のSparkContext
オブジェクトによって調整された、クラスター上の独立したプロセスセ
具体的には、クラスター上で実行するために、SparkContextは複数のタイプのクラスターマネージャー(Spark独自のスタンドアロンのクラスターマネージャー、MesosまたはYARN)に接続できます。 接続されると、Sparkはクラスター内のノード上のエグゼキューターを取得します。次に、アプリケーションコード(SparkContextに渡されるJARファイルまたはPythonファイルによって定義される)を実行者に送信します。 最後に、SparkContextは実行するためにタスクをエグゼキューターに送信します。
このアーキテクチャについては、いくつかの有用な点に注意してくださ:
- 各アプリケーションは独自のexecutorプロセスを取得し、アプリケーション全体の持続時間を維持し、複数のスレッドでタスクを実行します。 これには、スケジューリング側(各ドライバが独自のタスクをスケジュールする)とexecutorside(異なるアプリケーションのタスクが異なるJvmで実行される)の両方で、 ただし、外部ストレージシステムに書き込むことなく、異なるSparkアプリケーション(SparkContextのインスタンス)間でデータを共有することはできません。
- Sparkは、基盤となるクラスターマネージャーに依存しません。 Executorprocessesを取得し、これらが相互に通信できる限り、他のアプリケーション(Mesos/YARNなど)もサポートするacluster managerでも比較的簡単に実行できます。
- ドライバプログラムは、そのエグゼキュータからの着信接続をリッスンして受け入れる必要があります(例えば、sparkを参照してください。ドライバー。ネットワーク構成内のポート)。 そのため、ドライバプログラムはワーカーノードからnetworkaddressableである必要があります。
- ドライバーはクラスター上のタスクをスケジュールするため、workernodesの近く、好ましくは同じローカルエリアネットワーク上で実行する必要があります。 要求をクラスターにリモートで送信したい場合は、ワーカーノードから遠く離れたドライバーを実行するよりも、ドライバーにRPCを開き、近くからoperationsfromを送信する方が良
クラスターマネージャの種類
システムは現在、いくつかのクラスターマネージャをサポートしています:
- Standalone–sparkに含まれるシンプルなクラスターマネージャで、クラスターを簡単に設定できます。
- Apache Mesos–Hadoop Mapreduceとサービスアプリケーションを実行することもできる一般的なクラスターマネージャ。
- Hadoop YARN–Hadoop2のリソースマネージャー。
- Kubernetes–コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースのシステム。
クラスターマネージャーとしてnomadのサポートを追加するためのサードパーティのプロジェクト(Sparkプロジェクトではサポートされていません)が存在します。
アプリケーションの送信
アプリケーションは、spark-submit
スクリプトを使用して任意のタイプのクラスターに送信できます。アプリケーション提出ガイドでは、これを行う方法について説明します。
監視
各ドライバプログラムには、通常はポート4040上のweb UIがあり、runningtasks、executor、およびストレージ使用状況に関する情報を表示します。 Webブラウザでに移動するだけで、このUIにアクセスできます。 監視ガイドでは、他の監視オプションについても説明します。
ジョブスケジューリング
Sparkは、アプリケーション間(clustermanagerのレベル)とアプリケーション内(同じSparkContextで複数の計算が行われている場合)の両方でリソース割ジョブスケジューリングの概要では、これをより詳細に説明しています。
用語集
次の表は、クラスターの概念を参照するために使用される用語をまとめたものです:
用語 | 意味 |
---|---|
アプリケーション | Spark上に構築されたユーザープログラム。 クラスター上のドライバプログラムとエグゼキュータで構成されます。 |
アプリケーションjar | ユーザーのSparkアプリケーションを含むjar。 場合によっては、ユーザーはアプリケーションとその依存関係を含む”uber jar”を作成したいと思うでしょう。 ユーザーのjarにHadoopまたはSparkライブラリを含めるべきではありませんが、これらは実行時に追加されます。 |
ドライバプログラム | アプリケーションのmain()関数を実行し、SparkContextを作成するプロセス |
Cluster manager | クラスター上のリソースを取得するための外部サービス(standalone manager、Mesos、YARNなど)) |
展開モード | は、ドライバプロセスが実行される場所を区別します。 “クラスター”モードでは、フレームワークはクラスター内でドライバーを起動します。 “クライアント”モードでは、送信者はクラスターの外部でドライバを起動します。 |
ワーカーノード | クラスター内でアプリケーションコードを実行できる任意のノード |
Executor | タスクを実行し、それらの間でメモリまたはディスクストレージにデータを保持する、ワーカーノード上のアプリケーション用に起動されたプロセス。 各アプリケーションには独自のエグゼキュータがあります。 |
タスク | 1人のエグゼキュータに送信される作業単位 |
Job | Sparkアクションに応答して生成される複数のタスクからなる並列計算(例:save 、collect ); ドライバーのログにこの用語が使用されています。 |
Stage | 各ジョブは、互いに依存するステージと呼ばれる小さなタスクセットに分割されます(MapReduceのmapステージとreduceステージと同様)。 |