クラスターモードの概要

このドキュメントはSparkがクラスタ上でどのように実行されるかの概要を示し、関係するコンポーネントの理解を簡単にします。クラスタ上のアプリケーションの起動については アプリケーションのサブミット ガイドを読んでください。

コンポーネント

Sparkアプリケーションはクラスタ上で非依存のプロセスとして実行され、(driver programと呼ばれる)メインプログラム中のSparkContextオブジェクトによって調整されます。

特に、クラスタ上で動作するために、SparkContextは幾つかの種類のcluster managers(Sparkの独自のスタンドアローンクラスタマネージャーあるいはMesos あるいは YARN)に接続することができます。これらはアプリケーション間でリソースを割り当てます。一度接続すると、Sparkはクラスタ内のノード上の executorsを得ます。これらは計算の実行およびアプリケーションのためのデータを格納するプロセスです。次に、アプリケーションコード(JARによって定義あるいはSparkContextに渡されるPythonファイル)をexecutorに送信します。最後に、SparkContextはexecutorが実行するように tasks を送信します。

Spark クラスターコンポーネント

この構造に注意すべき幾つかの有用なことがあります:

  1. 各アプリケーションは独自のexecutorプロセスを取得し、それらは全てのアプリケーションおよび複数スレッド内でタスクを実行する当分の間は動いたままでいます。これは、スケジューリングの点(各ドライバは独自のタスクをスケジュールする)およびexecutorの点(異なるJVMの中で実行される異なるアプリケーションからのタスク)の両方の点で、アプリケーションがお互いに独立するのに役立ちます。しかし、それはデータが外部ストレージシステムへの書き込み無しには、異なるSparkアプリケーション(SparkContextのインスタンス)間で共有できないことも意味します。
  2. Sparkは潜在的なクラスタマネージャーに対して寛容です。executorプロセスを取得でき、お互いに通信できる限り、他のアプリケーションでもサポートされるクラスタマネージャー上でさえ、実行するのは比較的易しいです(例えば、Mesos/YARN)。
  3. ドライバープログラムは生きている間executorからやってくる接続をlistenし受け入れなければなりません(例えば、ネットワーク設定セクションのspark.driver.portを見てください)。そういうものとして、ドライバプログラムはワーカーノードからネットワークで特定可能でなければなりません。
  4. ドライバはクラスタ上でタスクをスケジュールするため、ワーカーノードの近く、できれば同じローカルエリアネットワーク上で実行されなければなりません。遠隔にあるクラスタへリクエストを送信したい場合、遠くにあるワーカーノードからドライバを実行するよりはドライバへRPCを開き近くからオペレーションをサブミットする方が良いでしょう。

クラスターマネージャータイプ

システムは現在のところ3つのクラスターマネージャーをサポートします:

アプリケーションの提出

アプリケーションはspark-submit スクリプトを使ってどのような種類のクラスタへサブミットすることができます。アプリケーション サブミッション ガイドでこれをどうやってするかを説明します。

監視

各ドライバプログラムは一般的にポート4040にweb UIを持っており、実行中のタスク、executorおよびストレージ利用率の情報を表示します。このUIにアクセスするには単にwebブラウザで http://<driver-node>:4040 に行きます。監視ガイド は他の監視操作についても説明します。

ジョブ スケジューリング

アプリケーション (クラスタマネージャーのレベル)とアプリケーション(複数の計算が同じSparkContext上で起こる場合)の両方でSparkはリソースの割り当てを制御します。これについてジョブ スケジューリング の概要 でもっと詳しく説明します。

用語

以下の表はクラスタの概念を参照するために見るような単語を要約します。

単語意味
アプリケーション Spark上のユーザプログラムの構築クラスタ上のドライバプログラムexecutors から成ります。
アプリケーションのjar ユーザのSparkアプリケーションを含むjar。時には、依存物と一緒にアプリケーションを含む"uber jar"を作成したいと思うでしょう。ユーザjarはHadoopあるいはSparkライブラリを含むべきではありませんが、実行時には追加されるでしょう。
ドライバープログラム アプリケーションのmain()関数を実行し、SparkContextを生成するプロセス
クラスターマネージャー クラスタ上でリソースを獲得するための外部サービス(例えば、スタンドアローンマネージャー、Mesos, YARN)
ノードの配備 どこでドライバープロセスを実行するかを区別する。"クラスター"モードでは、フレームワークはクラスタ内でドライバを起動する。"クライアント" モードでは、サブミッターがクラスター外でドライバを起動する。
ワーカーモード クラスタ内でアプリケーションコードを実行することができる全てのノード
Executor アプリケーションのためにワーカーノード上で起動されるプロセスで、タスクを実行し、タスク間でメモリあるいはディスクストレージにデータを保持します。各アプリケーションは独自のexecutorを持ちます。
タスク 一つのexecutorに送信されるだろう作業の単位
ジョブ Sparkアクションに応じてspawnされる複数のタスクを構成する並列計算 (例えば、save, collect); ドライバーのログの中でこの単語が使われることを見るでしょう。
ステージ 各ジョブはお互いに依存するステージと呼ばれる一連の小さなタスクに分割されます (MapReduceでのmapおよびreduceステージに似ています); この単語がドライバーログの中で使われることを見るでしょう。
TOP
inserted by FC2 system