目次
SparkとHadoopについて、誕生の経緯から違いを考えてみた
本日は、日経ビックデータ8月号p11に掲載された記事『ビッグデータ処理の新本命「Spark」 人気の「R」も分散処理で高速化』について考察します。
記事概要
現在、ビックデータの分散データ処理の主流となっているのが「Apache Hadoop」ですが、それと同様のシステムの「Apache Spark」が、米国で急速に普及している。
このSparkの特徴は、Hadoopと異なり、メモリ内で処理するため、機械学習のような何度も同じ情報を検証するような処理では、ハードディスクへの読書きのオーバーヘッドを少なくすることができ、結果、処理全体のパフォーマンスが向上する。そして、Spark 1.4からは、R言語にも対応したことにより、更に機械学習に適したソフトウェアに進化している。
以下の記事の内容からも、いかにSparkが機械学習に向いているかが分かる。
Spark Summitで講演したトヨタ自動車の米国法人のデータサイエンティストであるブライアン・カーサー氏は、「Sparkを使うことで、従来は36時間かかっていた機械学習の処理時間を、わずか9分に短縮できた」と語る。
Sparkはメモリ内で処理する
Sparkは、メモリ内で処理を行うため、機械学習の処理に特化している事を記事内で強く強調していましたので、技術者視点で若干掘り下げてみました。
そもそもHadoopは、インターネットの検索エンジンを開発する過程で生まれたため、メモリ内で処理を行うことを想定していなかったと考えられます。
検索エンジンは、インターネット上から集めた大量にコンテンツ情報を処理して作成した「転置インデックス」というものを使って辞書検索を行っています。そして、この転置インデックスの作成処理の過程でHadoopなどの処理(ソフトウェア)が生まれました。この、転置インデックスの作成処理は、機械学習のように何度も同じ情報の検証することがないため、メモリ内での処理することに注力していなかったと考えられます。
SparkはR言語が使える
R言語について、以前、弊社で検証した際、「PCのCPUのコア数を増やしても早くならない」という事が分かりました。(参照:Python vs R 実行速度比較) 要するに、最近のトレンドあるマルチコアの高価なCPU(Intel CORE i7 / Xeonなど)を使っても1つのコア分しか使えず、CPUパワーを使いきれていないという事になります。
未確認事項ですが、もし、R言語の処理もHadoopで分散処理できれば、R言語の自体の処理も早くなるかもしれません。また、R言語は、メモリを大量に消費するため、分散処理すればメモリ消費も分散できるのではないかと思われます。この考えについては、実際にSparkでR言語を実装して、検証してみないと分からないです。
各ソフトウェアメーカーがSparkのクラウドサービスを開始
既に米アマゾンウェブサービスや米IBM、米マイクロソフトなどがSparkのクラウドを開始している
上記の記事の内容からも分かるように、非常に簡単にSparkの環境の準備ができそうです。
Hadoopのリリース当初は、クラウド環境でHadoop環境を作ることができず、複数のHadoopが動作するPCを準備する必要があり、システムの立ち上げまでに非常に多くの時間が必要でした。しかし、現在は、Amazon EMRなどの安価で安定しているHadoop環境を短期間で準備できます。そして、このAmazon EMRなどが、Sparkにも対応したことで、Sparkの普及のスピードは加速しそうです。
更に、「Talend Open Studio for Big Data(無償版)」は、バージョン5.6からSparkのコンポーネント(機能)を追加しました。(参照:https://jp.talend.com/products/new) これによって、Sparkに必要な特有の分散処理などの複雑な手続きを、Talendの画面上にコンポーネントをドラック&ドロップで配置、設定することで容易にバッチ処理を開発できそうです。(参照:Talendがバッチ処理の開発方法を変える )