Spark アプリケーションの実行の仕組みについて、Apache Spark のサイトを読んでみてもどうもよくわからないので、自分なりにまとめてみました。まずは、概念的ですがSpark のコンポーネントについてです。
##Spark のコンポーネント概要
これは、Apache Spark のサイトでも書かれている内容 (Cluster Mode Overview) とほとんど同じで、概念的な各コンポーネントのつながりを書いています。また各コンポーネントの概要をまとめると、
###Driver Program
Spark アプリケーションの実行管理や制御を行うもので、main メソッドを含むプロセスとなります。またドライバはSpark アプリケーション毎に1つ存在し、アプリケーションの環境(SparkContext)を作る役割を担っています。
###Cluster Manager
Spark アプリケーションをクラスタ上で実行するためには、クラスタのリソース(メモリやCPU など)の確保を行ったり、スケジューリング管理を行う必要があります。それを行うのがCluster Manager の主な役目となります。ややこしいことにCluster Manager は以下の3つがあり、その内のどれかを使用することになっています。
- Standalone: Spark に標準でついているシンプルなもの
- YARN: Hadoop MapReduce や HBase やStorm など多様な分散アプリケーションを実行するために作られた、汎用性を持ったクラスターマネージャです。
- Mesos: (触ったことが無いのですが)YARNと同じく汎用的に利用できるクラスタマネージャです。
###ワーカーノード
Spark アプリケーションのコードを実行するノードです。
###Executor
JVM のプロセスで、ドライバから依頼されたTask を実行します。
###Task
Executor 内で実際の処理を行うスレッドです。
###Sparkアプリケーション
Driver Program とExecutor を含むクラスタ上で実行されるユーザプログラムです。
のようになります。
クラスタマネージャにより、クラスタの管理やアプリ制御のやり方が少しづつ変わってきますが、上記の基本的概念や、大筋の動きは同じとなるかと思います。
また、クラスタマネージャが実行時に大きな役割を果たしていると思いますので、次回はYARN 上でのSpark の動作について調べてみて書いてみようと思います。