Apache Sparkとは?分散データエンジンを解説
Apache Sparkは、速度のためにインメモリ計算を用いて、クラスタ全体で大規模なdatasetを並列に処理するためのオープンソースエンジンです。
Apache Sparkは、ビッグデータ処理の主力エンジンです。datasetが1台のマシンには大きすぎるとき、Sparkは作業をクラスタ全体に分散させ、中間結果をメモリに保持し、Python、Scala、SQLなどで扱いやすいAPIを公開します。
Sparkとは何か
Sparkは分散コンピュートエンジンです。大規模なdatasetをパーティションに分割し、workerノード全体で並列に処理して、結果を結合します。そのインメモリモデルは、多くのワークロード、特に反復的なものにおいて、古いディスクベースのフレームワークよりはるかに高速です。
どのように動作するか
Sparkアプリケーションは、transformationのDAGを構築しクラスタ上で実行されるexecutorにtaskを渡すdriverによって調整されます。Sparkは遅延評価です。transformationはプランを構築し、action(出力の書き込みなど)だけが実行をトリガーするため、SparkはDAG全体を最適化できます。
何に使われるか
Sparkは大規模なETL、SQL分析(Spark SQL)、streaming(Structured Streaming)、ML(MLlib)を支えます。DatabricksやEMRのようなマネージドサービスがSparkクラスタを実行するため、チームは自らインフラを運用する必要がありません。
SparkとCI
Sparkのjobはコードなので、CIは実際の高価なクラスタに到達する前にロジックエラーを捕捉するために、サンプルデータ上の小さなローカルSparkセッションに対してそれらを実行します。
steps:
- run: pip install pyspark
- run: pytest tests/spark # uses a local[*] SparkSessionLatchkeyノート
CI内のローカルSparkセッションは実際のCPUとメモリを使う可能性があります。Latchkeyでは、local[*]セッションに余裕を持たせるためにこれらのテストをより大きなrunnerで実行し、重いPySparkとJVMの依存関係をrun間でcacheし、一時的なサンプルデータの取得をauto-retryできます。
重要なポイント
- Apache Sparkは、インメモリ計算を用いてクラスタ全体で大規模なdatasetを並列に処理する。
- driverが遅延transformationのDAGを構築し、actionがトリガーしたときにexecutorがそれを実行する。
- CIは、実際のクラスタに到達する前に、サンプルデータ上の小さなローカルセッションに対してSparkのjobをテストする。