Apache Sparkとは何か――使い方や基礎知識を徹底解説Amazon EMRで構築するApache Spark超入門(1)(1/3 ページ)

本連載では、Sparkの概要や、ローカル環境でのSparkのクラスタの構築、Sparkの基本的な概念やプログラミングの方法を説明していきます。

» 2016年08月24日 05時00分 公開
[川原仁人コラビット]

 はじめまして。コラビットの川原と申します。私は「HowMa」というサービスで、Apache Spark(以下、Spark)を利用した住宅価格の推定エンジンの開発を担当しています。本連載では、Sparkの概要や、ローカル環境でのSparkのクラスタの構築、Sparkの基本的な概念やプログラミングの方法を説明していきます。そして、簡単なアプリケーションを作成して、Amazon EMR(Elastic MapReduce)のクラスタ上で実行できるまで解説します。

 これからSparkの導入を考えている方、または、業務で使う予定はないが少し興味がある方を対象に、サービス運用の中で得た知識を提供できればと思います。

Apache Sparkとは

 Apache Sparkは巨大なデータに対して高速に分散処理を行うオープンソースのフレームワークです。JavaやScala、Pythonなどいろいろなプログラミング言語のAPIが用意されています。

 Sparkは分散処理のややこしい部分をうまく抽象化してくれているので、簡潔なコードを実行するだけで、何百台ものコンピュータで、同時平行に計算を実行させることができます。

 また、クラスタ上のデータをSQLで処理できる「Spark SQL」や、機械学習のための「MLlib」、グラフ処理のための「GraphX」、ストリーミング処理のための「Spark Streaming」など、便利なコンポーネントが付属しています。

なぜSparkは生まれたのか? Hadoopとの違い

 分散処理のフレームワークといえば、Hadoopが有名です。

 Hadoopは需要のあるツールでどんどん活用の場が増えてきましたが、そんなHadoopにも欠点があることがだんだん分かってきました。その欠点を補う形で登場したのがSparkです。

 Hadoopの並列処理には下記のような欠点がありました。

  • 個々のコンピュータのメモリをうまく活用する設計ではなかった
  • 同じ処理を複数行う場合に、都度ストレージのアクセスが発生する
  • 同じデータを何回も扱う場合にストレージのアクセスが発生する

 最近、「機械学習」が人気ですが、まさに上記のような処理が必要です。機械学習の需要が高まるにつれて、上記の課題感も高まっていったと考えられます。

 Sparkはそのような課題を解決するために生まれました。「Resilient Distributed Datasets」という分散共有メモリの仕組みがあり、データはパーティション化され、複数マシンのメモリで管理されます。

 今まで、都度ストレージにアクセスしていたのが、インメモリで実行できるようになったわけです。

HadoopとSparkの違いについての概念図

 Hadoopを超え、より高速にビッグデータを扱える分散処理エンジン。それがSparkなのです。

Spark導入にメリットのあるケース

 Sparkは便利なツールですが宝の持ち腐れとならないように、自社の目的に沿った使い方ができるか、しっかりと考えた上で導入する必要があります。

 下記に、判断基準となる項目を順番に説明します。

プロジェクトで扱うデータが大量である場合

 Sparkはテラバイトはもちろん、ペタバイト級のデータ量も扱うことが可能です。1台のコンピュータで処理できないデータがある場合は、Sparkの出番です。

データの高速処理(リアルタイム性)を求められている場合

 もし、計算処理が1週間ほどかかるものであっても、Sparkを活用すれば1時間で終わらせることが可能になります。こういった高速化によってビジネス上のメリットがあれば、ぜひ導入を検討しましょう。

Hadoopを既に使っている場合

 SparkのアプリケーションはHadoopのYARN(Yet Another Resource Negotiator)クラスタ上でも実行できます。

 今後は、JavaでMapReduce処理を書くのではなく、Sparkで書いた方が、簡潔かつ質の高い並列処理プログラムが作成できるはずです。また、HDFSのデータを分析することも可能です。「Hadoopから移行」ではなく、「Hadoopと共存」という形で導入できるのがSparkの良いところです。

大規模データを扱う機械学習を行う場合

 小規模なデータであれば、Sparkを使わずに機械学習モデルを作っても十分でしょう。しかし、分析対象が大規模であれば、Sparkはオススメです。線形回帰やロジスティック回帰、クラスタリングなど、一般的な機械学習のアルゴリズムも備えています。大規模データの分析にぜひ、Sparkを役立ててみましょう。

どれにも該当しない場合

 上記の理由が、現状、1つも当てはまらない場合は、もしかすると自社のプロジェクトでSparkを使うメリットはないかもしれませんが、今後、発生することを見越してぜひ、この連載を通してSparkを使ってみてください。

Apache Spark 2.0が2016年7月末にリリース

 2016年7月末に最新版のApache Spark 2.0.0がリリースされました。

 SQL 2003のサポートが追加され、処理のパフォーマンスも改善されました。また、「Structured Streaming」という新しい機能が利用できます。さらに、R言語での分析の範囲も広がりました。Sparkの機械学習のコンポーネントには「spark.mllib」「spark.ml」の2種類がありますが、前者が非推奨となったようです。

 2.0というメジャーアップデートが行われたばかりなので、これから、Sparkを導入する場合は2.0を選ぶといいでしょう。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。