Hadoopって便利そうだけど、敷居が高そう、Sparkを使えばビッグデータのリアルタイム処理が高速にできるらしい、けど実際どうなの、という方に送ります。
Apache Spark、その前に背景とおさらい
システムにおける データアクセスについて、ムーアの法則にあるように高速化は頭打ちでしたが、Hadoop の登場により、ボトルネックだったディスクIOの高速化が図れるようになりました。可用性やパフォーマンスの向上を図るためのスケールアップ(基本スペックの向上)には限界がありますが、台数を増やす、処理ノードを増やす、役割を分割する等のスケールアウト(分散化)にて高速化、可用性を向上させる、近年における分散技術の発展には目を見張るものがあります。
Hadoop MapReduce の弱点
さて、分散処理基盤として現在最も使用されている(多分)Hadoop MapReduce の弱点 は、そもそも ディスクIOの並列化をベース としていることに起因します。そのため、いくら並列化をしたとしても、ディスクIOが都度都度発生するような 繰り返し処理 や リアルタイム処理 には、やはり 動作コストがかかってしまう、という悩みを潜在的にもっています。これらの操作は頻繁なデータ読み書きを繰り返し行うビッグデータ分析に関しては、非常に高コストな処理であり、Hadoop の利用価値向上を阻害していた原因の一つなのではないかと思います。
Hadoop においては、実際の処理系コンポーネントである Hadoop MapReduce がその部分を担っていますが、Hadoop MapReduce 自体は、処理途中の中間データをメモリ上に保持する機構を有していません。
Hadoop(https://15809-presscdn-0-93.pagely.netdna-cdn.com/wp-content/uploads/2016/02/MTIyMzAzNjEzMjc1MDQ2NTAy.png)
Apache Spark、その前に背景とおさらい
Apache Spark は日頃多方面にてお世話になっている、Apache プロジェクト におけるトップレベルプロジェクトの一つです。
■Apache Spark
https://spark.apache.org
上記 Hadoop MapReduce の弱点である 機械学習 や リアルタイム処理 といった オンタイムの処理をメモリ上に展開されたデータに対して行う ための 分散処理用フレームワーク です。
Hadoop MapReduce と、Apache Spark のデータ処理における大きな差別項目として着目すべき点は、
1. データの入出力は ディスクIOを伴わないインメモリ で行うこと
(Hadoop MapReduce のみを使用するより10倍から100倍高速!)
2. データの 格納場所の選択肢が多い こと (HDFS, Cassandra, H Base, Amazon S3)
になります(出典:https://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 の活用シーン
本記事は、日本サード・パーティ株式会社(JTP)にて、執筆しています。
JTPは約30年に渡り、様々なベンダーのサポートを行う企業です。 設計、構築、開発、運用、ヘルプデスク、トレーニングなど、ITのライフサイクルを通して技術サービスを提供しています。
中でも、JTP の IT教育サービスでは、クラウド、Hadoop関連技術など、OSS の最新技術 トレーニングを数多く実施しています。
JTPでは、経験豊富なエンジニア、講師陣により、多くの技術記事を公開しております。
▼JTPの情報メディア「JTP Technology Port」はこちらから!