近年IoTへの関心が大きく高まっていますが、インターネットに接続された各種デバイスから集約される大量の情報を有効活用するには、集められた情報をいかに処理するかがカギとなります。「Apache Spark」はこうしたビッグデータを高速に処理するための汎用エンジンとして現在活発に開発が進められています。本稿では「Bluemix」の提供するApache Sparkサービスを利用して、初歩的なApache Sparkの利用方法および機械学習ライブラリを利用したプログラムの実装方法をご紹介します。
はじめに
本稿はBluemixのアカウントを所持している読者を対象としています。Bluemixは初回登録後クレジットカードの登録なしで30日間無料で利用することができるので、まだアカウントをお持ちでない方はまずアカウント登録をおすすめします。BluemixのApache Sparkサービスには、「Jupyter Notebook」をベースとしたインタラクティブなデータ分析環境が提供されており、今回は、このNotebook上にPythonでプログラムを記述していきます。Bluemixで提供されている各ソフトウェアのバージョンは下記のとおりです。
- Apache Spark 1.6.0
- Python 2.7.11
- Jupyter notebook 4.0.6
- iPython 4.0.1
Apache Sparkとは
Hadoop MapReduceによって始まったビッグデータ革命ののち、MapReduceの利用が広まるにつれ顕在化してきたパフォーマンス面の問題などを解決するため生まれたのがApache Spark(以下、Spark)です。Sparkは、2009年UCバークレーのRAD Labにおける研究プロジェクトとして誕生し、2010年の3月にオープンソース化、2013年の6月にはApache Software Foundationへ移行されました。今年の7月26日には現時点の最新バージョンである2.0.0がリリースされています。Sparkの特長として、公式サイトでは下記の4点が挙げられています。
- Speed:Hadoop MapReduceと比較してon-memoryで100倍、on-diskで10倍の速度
- Ease of Use:豊富なAPIによる各種プログラミング言語(Java、Scala、Python、R)での開発
- Generality:SQLや機械学習ライブラリ、グラフ処理などの多様な処理の組み合わせ
- Runs Everywhere:Hadoop、Mesos、スタンドアロンもしくはクラウドでの実行
Sparkでは、構造化データを取り扱うことができる「Spark SQL」、ストリーミングアプリケーションのための「Spark Streaming」、グラフ計算のための「GraphX」、そして今回利用する機械学習用ライブラリ「MLlib」が用意されています。これらのライブラリはすべてfig2のようにSpark Coreと呼ばれる基盤APIを提供するコンポーネントの上に構築されており、例えばストリーミングソースからのデータを機械学習によってリアルタイムに分類するなど、相互に組み合わせることで高度なデータ分析を行うことが可能です。