Apache Spark
概要
Apache Sparkとは、大量のデータに対する処理を、多数のコンピュータに分散して並列に行わせるソフトウェアの一つ。Apacheソフトウェア財団が開発し、Apacheライセンスに基づいてオープンソースとして公開されている。多数のコンピュータを束ねて大量のデータを分散して保管し、並行して処理を行うことができる。各機器へのデータの割り当てや実行指示、結果の集約などは管理用のサーバ(Cluster Manager)が行ってくれるため、開発者は行いたい処理をプログラムとして記述するだけでよい。
Apache SparkではデータをRDD(Resilient Distributed Datasets)と呼ばれる管理単位に分割して各ノードで管理する。RDDは原則としてメインメモリ(RAM)上で管理され、必要に応じてストレージに記録される。複数の処理を組み合わせて順番に実行するような場合に、毎回ストレージへの記録と読み込みを繰り返さなくて良いため、高速に処理することができる。
Apacheが開発する分散処理フレームワークとして以前から「Apache Hadoop」が知られているが、Hadoopでは一回の分散処理ごとに結果をストレージに記録するため、機械学習など反復的な処理を多用する用途では極端に性能が劣化するという問題があった。Sparkは各ノード上のメモリを有効活用することでこの点を改善しており、Hadoopより何桁も高速に実行できる事例もあるとされる。
標準ではWindows、macOS、Linuxなどのプラットフォームに対応しており、JavaやScala、Python、R言語などのプログラミング言語から利用することができる。Java APIを経由して、Scalaのように実行環境にJava仮想マシン(JVM)を流用する、いわゆるJVM言語から利用することもできる。
ノードやデータ、処理の管理を行う基幹部分である「Spark Core」の他に、管理下のデータにSQLによる問い合わせや処理を行う「Spark SQL」、連続的なデータ入出力(ストリーミング)に対応する「Spark Streaming」、機械学習に関する機能をまとめた「MLlib」(Machine Learning Library)、グラフ処理の機能を提供する「GraphX」などの拡張機能も用意されている。