Skip to content
Latchkey

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セッションに対してそれらを実行します。

Testing Spark jobs locally in CI
steps:
  - run: pip install pyspark
  - run: pytest tests/spark   # uses a local[*] SparkSession

Latchkeyノート

CI内のローカルSparkセッションは実際のCPUとメモリを使う可能性があります。Latchkeyでは、local[*]セッションに余裕を持たせるためにこれらのテストをより大きなrunnerで実行し、重いPySparkとJVMの依存関係をrun間でcacheし、一時的なサンプルデータの取得をauto-retryできます。

重要なポイント

  • Apache Sparkは、インメモリ計算を用いてクラスタ全体で大規模なdatasetを並列に処理する。
  • driverが遅延transformationのDAGを構築し、actionがトリガーしたときにexecutorがそれを実行する。
  • CIは、実際のクラスタに到達する前に、サンプルデータ上の小さなローカルセッションに対してSparkのjobをテストする。

関連ガイド