Apache Spark情報
Apache Sparkとは
Apache Sparkは、ビッグデータや機械学習など、大規模なデータを扱うクラスターコンピューティング向け分散処理フレームワークです。Sparkは2009年にカルフォルニア大学バークレー校のAMPLabで、Hadoopのコミッターでもある マテイ・ザハリア氏により開発が開始され、2010年初頭にオープンソースされました。2013年にApache Software Foundationに移行し、数百の組織や開発者により開発が継続されています。
Sparkが開発された目的としては、従来のMapReduceの処理速度が遅いことへの改善や、MapとReduceの反復を繰り返すスタイルにとらわれない柔軟な処理スタイルへの対応が挙げられます。
Sparkは分散処理フレームワークとして単体でも動作するためポストHadoopとして注目されている一方で、MapReduce,HDFS,YARNなどからなるHadoopコアシステム中のMapReduceの代替として利用することも可能となっています。
主な特徴
Sparkの大きな特徴として、Sparkの提供する簡素なAPIを使って柔軟な処理モデルを容易にプログラミング可能なこと、大規模データに対して従来のMapReduceに比べ遥かに短い時間で処理が行えることなどが挙げられます。
従来のMapReduceでは、処理モデルとしてMapとReduceを1セットで行なう必要があったために、Hadoop上で動くアプリケーションを開発するにはこのスタイルに沿って開発する必要がありました。そのため柔軟な処理モデルを開発することが難しいといった問題が存在しました。
さらに、MapReduceでは、1回のMapとReduce処理毎に処理結果のDisk への書込が発生し、処理速度の向上が難しいという問題が存在しました。これに対してSparkでは、メモリに読み込んだデータセット(RDD)に対して複数回のMap処理を連続して実行し、さらにReduceした結果をDiskへ書き込む事なくインメモリの状態で、更に次のMap処理をそのデータセットに対して行なうといった方法をとっているため、MapReduceに比べ最大で100倍以上の処理速度の向上が見られる場合もあるとされています(従来のMapReduceのように処理結果をDiskへ書き込むことも可能)。
Sparkは、分散処理フレームワークとして下記のコンポーネントから成り立っています。
- Spark Core (Scala, Java, Python, RAPI を含む)
- Spark SQL + DataFrames
- Spark Streaming
- MLlib
- GraphX
Spark Core
Sparkでは、処理対象のデータをRDD(Resilient Distributed Dataset)という形式で保持します。
RDDは不変且つ並列実行可能なコレクションで、分散された各コンピュータ上に配置されます。
Sparkを使ったプログラミングモデルでは、このRDDに対してSpark Coreで提供されている各種メソッドを適応しながら処理を行っていきます。Spark Coreの提供するAPIを通してRDDを操作する際には、開発者は分散されたデータを意識することなく分散処理を実現することができます。
これは、Sparkの特徴の1つの柔軟な処理を容易にプログラミング出来るとされる点です。
Spark Coreで提供されるAPIですが、Sparkの開発言語であるScala以外にもJava,Python,Rと言った言語から呼び出し可能なAPIが標準で提供されています。また、3rd-Partyライブラリの中にはScalaと同じくJavaVM上で動く関数型言語のClojureからSpark APIを呼び出すためのライブラリも存在しており、更に他の言語のSpark APIへの対応も広がっていくことが予想されます。
Spark SQL + DataFrames
Sparkでは、Sparkが提供するAPIを通じてRDDを操作する方法以外にも、Spark SQLというSQLライクな言語を使ってDataFramesというデータベースのテーブルのような名前カラムを持つ抽象化したデータセットを操作することが可能です。
これは、Scala,Java,Python,Rといった言語を習得していないユーザーでも、SQLの知識があればSpark SQLを通して、Sparkを使ってデータの処理を行うことを可能とするインターフェイスです。
Spark Streaming
Sparkで絶えず送られてくるStreamingデータに対してリアルタイム分散処理を可能とするための機能を提供するエンジンです。
同じくストリーミングデータを処理するフレームワークとしては、Apache Stormが存在します。Apache Stormがストリーミングデータの処理に特化して作られたフレームワークであるのに対してSpark StreamingはSparkでリアルタイムデータを処理するためのエンジンとしての機能です。
他には、Apache Flinkというストリーミング処理フレームワークも存在します。こちらは、バッチ処理も可能な上に、機械学習ライブラリやグラフ処理ライブラリなども存在するため、Sparkにかなり似通った構成になっており、Sparkの対抗馬とされています。
MLlib
Sparkの機械学習ライブラリです。Sparkの柔軟な処理スタイルで機械学習を行なうプログラムを記述することが出来ます。
機械学習のライブラリとしては、先に、Hadoopと連携して機械学習を行なうMahoutというソフトウェアが存在しました、しかし、Hadoop+Mahoutでは、MapReduceのプログラミングモデルを使って機械学習プログラムを作らなければならないために、処理速度の低下という問題が有りました。
それに比べSparkは、Hadoopよりも高速に処理を行なうことが出来るために、SparkとSparkが提供するMLlibを使った機械学習の方が効率がよいということで注目が高まっています。
GraphX
GraphXは、Sparkを通じてグラフデータの並列処理を行なうためのAPIを提供しています。
Sparkの特徴である高速な処理速度でグラフデータの並列処理が可能な点が特徴です。
上記で説明したSparkを形成するコンポーネントの中にはストアレッジに分類されるものは存在しません。
Sparkでは、読込書込として既存の各種ストアレッジを利用することが出来ます。下記は、Sparkと連携可能なストアレッジの一部です。(3rd-partyのライブラリ利用を含む)
HDFS, Cassandra, HBase, S3, MongoDB, Couchbase, Riak, Neo4j, OrientDB
また、読込可能なデータソースとしては、CSVやXMLなどのファイルから、Solr, Elasticsearchなどの検索エンジンなど多岐に渡ります。
上記に上げた、各種データソースとの連携を可能にするパッケージ以外にも既存のSpark ECOシステムを拡張するための、各種パッケージが提供されています。これらのパッケージはSparkPackageとして下記サイトで公開されています。
動作環境
Spark が動作保証しているのは、下記のOSになります。また、稼働させるにはJavaがインストールしてある必要があります。
- 主要なLinuxディストリビューション
- Windows
- Linux
- MacOSX
Sparkが提供するAPIがサポートするバージョンは下記です。
- Java 8、11、17(Java 8u371 未満はSpark3.5.0では非推奨です)
- Scala 2.12、2.13(アプリケーションはSparkと同じバージョンを使用する必要があります)
- Python 3.8以上
- R 3.5 以上
Apache Sparkのライセンス
SparkはApacheのトップレベルプロジェクトの1つです。ライセンスはApache License 2.0となっており、ユーザーはそのソフトウェアの使用や頒布、修正、派生版の頒布をすることに制限を受けません。
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
Apache Kafka
アパッチ カフカ。分散ストリーミングプラットフォームです。
-
サポート対象
Apache Hadoop
アパッチ ハドゥープ。Java言語で実装された大規模データの蓄積、分析を分散して処理するフレームワークです。