本連載では、Sparkの概要や、ローカル環境でのSparkのクラスタの構築、Sparkの基本的な概念やプログラミングの方法を説明していきます。
はじめまして。コラビットの川原と申します。私は「HowMa」というサービスで、Apache Spark(以下、Spark)を利用した住宅価格の推定エンジンの開発を担当しています。本連載では、Sparkの概要や、ローカル環境でのSparkのクラスタの構築、Sparkの基本的な概念やプログラミングの方法を説明していきます。そして、簡単なアプリケーションを作成して、Amazon EMR(Elastic MapReduce)のクラスタ上で実行できるまで解説します。
これからSparkの導入を考えている方、または、業務で使う予定はないが少し興味がある方を対象に、サービス運用の中で得た知識を提供できればと思います。
Apache Sparkは巨大なデータに対して高速に分散処理を行うオープンソースのフレームワークです。JavaやScala、Pythonなどいろいろなプログラミング言語のAPIが用意されています。
Sparkは分散処理のややこしい部分をうまく抽象化してくれているので、簡潔なコードを実行するだけで、何百台ものコンピュータで、同時平行に計算を実行させることができます。
また、クラスタ上のデータをSQLで処理できる「Spark SQL」や、機械学習のための「MLlib」、グラフ処理のための「GraphX」、ストリーミング処理のための「Spark Streaming」など、便利なコンポーネントが付属しています。
分散処理のフレームワークといえば、Hadoopが有名です。
Hadoopは需要のあるツールでどんどん活用の場が増えてきましたが、そんなHadoopにも欠点があることがだんだん分かってきました。その欠点を補う形で登場したのがSparkです。
Hadoopの並列処理には下記のような欠点がありました。
最近、「機械学習」が人気ですが、まさに上記のような処理が必要です。機械学習の需要が高まるにつれて、上記の課題感も高まっていったと考えられます。
Sparkはそのような課題を解決するために生まれました。「Resilient Distributed Datasets」という分散共有メモリの仕組みがあり、データはパーティション化され、複数マシンのメモリで管理されます。
今まで、都度ストレージにアクセスしていたのが、インメモリで実行できるようになったわけです。
Hadoopを超え、より高速にビッグデータを扱える分散処理エンジン。それがSparkなのです。
Sparkは便利なツールですが宝の持ち腐れとならないように、自社の目的に沿った使い方ができるか、しっかりと考えた上で導入する必要があります。
下記に、判断基準となる項目を順番に説明します。
Sparkはテラバイトはもちろん、ペタバイト級のデータ量も扱うことが可能です。1台のコンピュータで処理できないデータがある場合は、Sparkの出番です。
もし、計算処理が1週間ほどかかるものであっても、Sparkを活用すれば1時間で終わらせることが可能になります。こういった高速化によってビジネス上のメリットがあれば、ぜひ導入を検討しましょう。
SparkのアプリケーションはHadoopのYARN(Yet Another Resource Negotiator)クラスタ上でも実行できます。
今後は、JavaでMapReduce処理を書くのではなく、Sparkで書いた方が、簡潔かつ質の高い並列処理プログラムが作成できるはずです。また、HDFSのデータを分析することも可能です。「Hadoopから移行」ではなく、「Hadoopと共存」という形で導入できるのがSparkの良いところです。
小規模なデータであれば、Sparkを使わずに機械学習モデルを作っても十分でしょう。しかし、分析対象が大規模であれば、Sparkはオススメです。線形回帰やロジスティック回帰、クラスタリングなど、一般的な機械学習のアルゴリズムも備えています。大規模データの分析にぜひ、Sparkを役立ててみましょう。
上記の理由が、現状、1つも当てはまらない場合は、もしかすると自社のプロジェクトでSparkを使うメリットはないかもしれませんが、今後、発生することを見越してぜひ、この連載を通してSparkを使ってみてください。
2016年7月末に最新版のApache Spark 2.0.0がリリースされました。
SQL 2003のサポートが追加され、処理のパフォーマンスも改善されました。また、「Structured Streaming」という新しい機能が利用できます。さらに、R言語での分析の範囲も広がりました。Sparkの機械学習のコンポーネントには「spark.mllib」「spark.ml」の2種類がありますが、前者が非推奨となったようです。
2.0というメジャーアップデートが行われたばかりなので、これから、Sparkを導入する場合は2.0を選ぶといいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.