Apache spark には、そのアプリケーションをどの環境で実行させるかを指定するための設定値として、master(master URL)というものがあります。
その目的に合わせて指定する必要があるので、それぞれのモードをまとめておきたいと思います。
1.ローカルモード
1つのインスタンス(driverプロセス)で処理を行います。
実行中の spark アプリケーション上の ExecutorID には、driver という表記しか存在せず、分散処理では Executor が担当する計算処理もすべてこのインスタンスで処理されます。
アプリケーションの単体テストで指定されることをよく見かけます。
master URL には "local" と指定するが、その指定の仕方によって、実行時に作成されるスレッド数などに影響があります。
値 | スレッド数 | 最大試行回数(n回以上何らかのタスクが失敗するとジョブが失敗と見なされる) |
---|---|---|
local | 1 | 1 |
local[2] | 2 | 1 |
local[*] | cpuのコア数と同じ | 1 |
local[*,3] | cpuのコア数と同じ | 3 |
2.ローカルクラスターモード
ローカル環境において所謂、疑似分散モードで処理を行います。
実際に使われている場面を見ることが少ないのですが、単体テストで上手く使えれば、パフォーマンスの向上につなげられるかもしれません。
値 | Executor数 | cpu コア数 | メモリサイズ |
---|---|---|---|
local-cluster[2,2,1024] | 2 | 2 | 1024 |
3.yarn client モード
yarn によるリソース管理の元で実行します。
ただし、driver プロセスはクライアント側のプロセスとして実行されます。
アウトプットを素早く確認するための対話モードやデバッグに向いているため、開発中に指定することがあります。
値 | 補足 |
---|---|
yarn-client | Yarn Resource Managerの場所は、Hadoopの設定ファイルで指定するため、マスターURLにIPアドレス等は指定する必要がない |
4.yarn cluster モード
yarn によるリソース管理の元で実行します。
driver プロセスもYarn管理下の アプリケーションMaster 内で実行されます。
driver プロセスに異常が発生した場合に自動的に再割り当てされるため、本番環境で実行するのに適しています。
値 | 補足 |
---|---|
yarn-cluster | Yarn Resource Managerの場所は、Hadoopの設定ファイルで指定するため、マスターURLにIPアドレス等は指定する必要がない |
5.Spark Standalone Cluster モード
SparkにはHadoopやリソース管理のYarnなしで、ローカルで簡易クラスターを実行させるためのモードが用意されています。
Sparkのクライアントに付属している Master と Worker を起動させることで、そのクラスターを作成することが可能です。
ローカルで動かすという点では、ローカルモードと同じであるため、間違えやすい。
実際、Spark Standalone Cluster を構築しているにも関わらず、ローカルモードで動かしているという勘違いを何度か経験しています。
ローカルクラスターモードは、1台のサーバ上で複数のExecutorを動作させるモードで、Spark Standalone Cluster モードは、複数のサーバ(コンテナ)に亘って複数のdriver もしくはExecutorを動作させます。
そのため、HadoopやYarnの環境はないけれど、少数のサーバで簡易クラスタを構築させたい上では使用できると思われます。
値 | 補足 |
---|---|
spark://ホスト:ポート | ホストにはホスト名もしくはIPアドレスを指定する。ポートはデフォルトで7077 |
※Yarnの他に Apache Mesos など他にもリソース管理する仕組みがあります