Apache Sparkとは?~背景から活用シーンまで~

Apache Sparkとは?~背景から活用シーンまで~

Hadoopって便利そうだけど、敷居が高そう、Sparkを使えばビッグデータのリアルタイム処理が高速にできるらしい、けど実際どうなの、という方に、Sparkの概要と試し方などをご紹介します。

Apache Spark、その前に背景とおさらい

システムにおける データアクセスについて、ムーアの法則にあるように高速化は頭打ちでしたが、Hadoop の登場により、ボトルネックだったディスクIOの高速化が図れるようになりました。可用性やパフォーマンスの向上を図るためのスケールアップ(基本スペックの向上)には限界がありますが、台数を増やす、処理ノードを増やす、役割を分割する等のスケールアウト(分散化)にて高速化、可用性を向上させる、近年における分散技術の発展には目を見張るものがあります。

スケールアップとスケールアウト

 

Hadoop MapReduce の弱点

さて、分散処理基盤として現在最も使用されている(多分)Hadoop MapReduce の弱点 は、そもそも ディスクIOの並列化をベース としていることに起因します。そのため、いくら並列化をしたとしても、ディスクIOが都度都度発生するような 繰り返し処理 や リアルタイム処理 には、やはり 動作コストがかかってしまう、という悩みを潜在的にもっています。これらの操作は頻繁なデータ読み書きを繰り返し行うビッグデータ分析に関しては、非常に高コストな処理であり、Hadoop の利用価値向上を阻害していた原因の一つなのではないかと思います。

Hadoop においては、実際の処理系コンポーネントである Hadoop MapReduce がその部分を担っていますが、Hadoop MapReduce 自体は、処理途中の中間データをメモリ上に保持する機構を有していません。

Hadoop(http://15809-presscdn-0-93.pagely.netdna-cdn.com/wp-content/uploads/2016/02/MTIyMzAzNjEzMjc1MDQ2NTAy.png)

Apache Sparkとは?

Apache Spark は日頃多方面にてお世話になっている、Apache プロジェクト におけるトップレベルプロジェクトの一つです。
■Apache Spark
http://spark.apache.org

上記 Hadoop MapReduce の弱点である 機械学習 や リアルタイム処理 といった オンタイムの処理をメモリ上に展開されたデータに対して行う ための 分散処理用フレームワーク です。

Hadoop MapReduce と、Apache Spark のデータ処理における大きな差別項目として着目すべき点は、
①データの入出力は ディスクIOを伴わないインメモリ で行うこと (Hadoop MapReduce のみを使用するより10倍から100倍高速!)
②データの 格納場所の選択肢が多い こと (HDFS, Cassandra, H Base, Amazon S3)
になります(出典:http://spark.apache.org/)。

また、Spark 自体は Scala言語 で構築されていますが、データの分析操作を記述するためのプログラミング言語としては、Scala の他、Java、Python、Rを選択することが可能 です。日常使い慣れているプログラミング言語でデータ分析操作を記述できる、という点は開発者にとってはうれしい限りです。

Spark(https://upload.wikimedia.org/wikipedia/commons/e/ea/Spark-logo-192x100px.png)

Hadoop MapReduce と Spark の活用シーン

素人考え的に Spark は Hadoop MapReduce に置き換わるのか? という疑問が浮かびますが、それは否 です。いくらインメモリの処理がディスクIOを伴わない分高速だといっても、一般にビッグデータと呼ばれるデータをインメモリに全て展開することは不可能でしょう。

メモリにロードしきれないような大容量のデータに対するデータの切り出しや永続化に関しては、従来の Hadoop MapReduce を用いて行うことが考えられます。分析データの提示に関してある程度の遅延が許可されるような状況においては、従来通りの使い方で良いと思います。ただ、反復によりディスクIOが多発する可能性のある繰り返し処理 や、データ提示に遅延が許可されないリアルタイム処理 に関しては、インメモリで処理を行う Spark を活用することが効果的 かと思います。結局のところ、Hadoop MapReduce と Spark は ベストパートナー になりうる分散処理の選択肢の一つです。

Hadoop と Sparkの連携

どうやってSparkを試すの?

Spark を試すためには、Apache Spark を yum や rpm を使って既存の Hadoop 環境に追加 するだけです。Hadoop の環境自体の構築方法が、、、と思われる場合には、基本となるHadoop 環境が構築済みの仮想マシンを、あらかじめ用意してくれているベンダーさんがあります。

仮想マシンを VirtualBox や VMware Player 上で動作させて、Spark やその他必要なコンポーネントを追加すれば、すぐにSparkを試せる環境が揃います。
興味のある方は、MapR Sandbox をダウンロードして、環境構築にチャレンジしてみてください。

Sandboxの起動画面

最後に

さて、Spark を活用するためのイメージは掴めましたでしょうか。大規模なデータ分析環境におけるリアルタイム処理には Spark は有効な注目株 と言えます。過去のメインフレームからオープンシステムへ転換したようなIT事情を鑑みても、システムのアーキテクチャは 分散と集約を繰り返す歴史を、そのままを証明している技術の一つ であると思います。
不定期ではありますが、別途その性能差を実際に比較して、レポートします。

Sparkシェル(Scala)の起動画面

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。