Apache Spark on Azure をビジネス価値につなげる 8 つのシナリオ(1)


Microsoft Japan Data Platform Tech Sales Team

阪本 真悟

Apache Spark とは

spark
高速かつ汎用的な並列分散処理エンジンである Apache Spark は、構造化データと非構造化データの両方を扱うことが出来、バッチ アプリケーションやインタラクティブなアルゴリズム、あるいはストリーミングといった幅広い処理をカバーすることが出来ます。

また大容量データを基にした機械学習やデータ マイニングを、複数のコンポーネントを統合したシンプルな API によって実現することが可能なため、ここ最近の機械学習やデータ分析のニーズの高まりを受けて急激に注目を集めています。

現在 Spark のコントリビュータは1,000名近くになり、Apache Software Foundationと世界中のオープン ソースのビッグデータ プロジェクトの中でもっともアクティブなプロジェクトになっています。

Sparkで何が出来るのか?(Why Spark?)

並列分散処理であれば Hadoop とどう違うのか? Spark を使うとどんなことが出来て、何が嬉しいのか?今なぜ Spark が注目を集めているのか、コンポーネントの細かい機能紹介の前に少し整理をしてみます。

その1. Hadoop との違い

同じように大規模データを分析することが出来る強力な並列分散処理エンジンに Hadoop があります。Hadoop はクラスタ構成を組んだ複数のワーカー ノードで、数百テラ~ペタクラスの大規模データの処理を分散して実行することができます。1 台のスーパー コンピューターを準備するより安価で、特定のノードに障害が発生した時の処理継続の考慮など信頼性も確保されており、将来的な拡張も容易な構成になっています。

ビッグデータ分析のニーズにマッチした Hadoop による並列分散処理ですが、一方で分散処理を実行するためのオーバー ヘッドが大きいという問題があります。複数のノードで分散処理をするとしても、ディスクへの読み込み、書き込み処理にどうしても時間がかかってしまうため、大量データのバッチ処理には向いていますが、リアルタイムで応答を返すような処理には向いていません。
Spark は Hadoop の仕組みを活用した上で、Hadoop の不得意なリアルタイム処理をクラスタにまたがったメモリ上で行うことで高速化しています。例としてロジスティック回帰分析を Hadoop 上で実行した時と、Spark 上で実行した時の実行時間で比較すると Spark の方が約 100 倍高速(※)であるという結果が出ています。

※ Source : http://spark.apache.org/

spark3

特に機械学習では「データの読み込み」→「モデリング(学習)」→「データの書き込み」という処理を繰り返し行うことで精度を高めるため、 インメモリで処理を行う Spark を利用することで繰り返し発生するディスクへの書き込みを削減し、 10~100 倍もの大幅な高速化を実現することが出来るのです。

spark2

その2. Azure 上で Spark を利用するメリット

Spark の環境は Hadoop を前提にしているため 1 から構築しようとすると大変です。Azure 上であれば、すぐに使える Spark 環境を簡単に作成することが出来ます。次に Azure 上で Spark を利用するメリットをいくつか挙げてみました。

  • 容易に Spark + Hadoop 環境が作成出来る
    Microsoft Azure 管理ポータル、Azure PowerShell、または HDInsight .NET SDK を使用すると、新しい Spark クラスターを数分で作成できます。
  • 運用管理ツール、データ分析のためのツールが揃っている
    Azure 上の Spark 環境には、ジョブの送信と実行中のジョブの監視をリモートで実行する REST-API ベースの Spark ジョブ サーバーである Livyが含まれています。
    また データ分析のための Jupyter Notebook が事前に構成されています。 対話型のデータ処理とビジュアル化にこれらを使用できます。Anaconda ライブラリが事前にインストールされているため、機械学習、データ分析、視覚化などのための 200 個近いライブラリを活用することが出来ます。
  • 他の Azure Services との連携
    Azure 上の Spark 環境には、Azure Event Hubs へのコネクタが付属しています。 Spark の一部として既に使用できる Kafka に加えて、Event Hubs を使用してストリーミング アプリケーションを作成できます。
    また追加のストレージとして Azure Data Lake Store を使用するように構成できます。
  • R Server のサポート
    R Server をセットアップして、Spark クラスターの上で R の統計解析処理を高速に実行することが出来ます。
  • 拡張性、エンタープライズレベルのサポートを準備
    クラスター内のノード数は作成時に指定できますが、ワーク ロードに合わせて拡張、縮小できます。 また、すべてのデータは Azure Blob Storage に格納されるため、Spark クラスターはデータの損失なしで削除できます。
    HDInsight の Spark では、エンタープライズ レベルの 24 時間無休体制のサポートと、アップタイム 99.9% の SLA が提供されます。

その3. ビジネスへの活用事例

Spark 上の機械学習ライブラリなどを使うことによって、実際に次のような業種毎のビジネス ソリューションを実現しています。

spark4

Spark の各コンポーネント紹介

次に Spark を構成するコンポーネントを紹介します。Spark は次のような統合スタックによって成り立っています。

spark

Apache Spark コア

Spark の基本的な機能を提供する Spark Core は分散実行エンジンの本体です。メモリ管理、障害回復処理、タスク スケジューラ、ディスクとのデータのやり取りを制御します。クラスタ環境でのインメモリ処理を制御する耐障害性分散データセット(Resilient Distributed Datasets = RDD)を定義し、それらを管理する API の中心です。

Spark SQL 構造化データ

Spark SQL は Hive テーブル、JSON を含む多くのデータソースをサポートする構造化データを扱うためのコンポーネントです。Hadoop 上のデータセットに対しても、RDD に対しても SQL クエリの発行が可能です。

Spark Streaming リアルタイム

データのストリーム処理を実現するためのコンポーネントです。Spark Streaming は低レイテンシ(数百ミリ秒以内)での動作が可能なため、ニアリアルタイムでのビッグデータ分析のためのデータの入り口として使うことが出来ます。例えば WEB サーバが生成する大量のログファイルの分析、バッチ処理中のデータをリアルタイムで監視したいときに警告を発する。といった使い方が考えられます。

MLlib 機械学習

機械学習のためのアルゴリズムを提供します。回帰、分類、クラスタリング、協調フィルタリングを含むアルゴリズムやモデルの評価やデータのインポートなど支援機能も備えています。

GraphX グラフ処理

グラフ処理のためのライブラリです。ソーシャルネットワーク内の友達のつながりを調べたり、エンティティ間の接続構造に基づいた分析を実行する場合などに役立ちます。

まとめ

今回ご紹介した Spark は汎用的なフレームワークで、さまざまなアプリケーションを実行するための基盤になるものです。特にここ最近注目されている機械学習、統計解析を実現するために必要な、大規模データ分析処理の際の高いスループットと低いレイテンシの両方を実現した理想的な環境ということが出来ます。

Azure 環境で Spark による分析を始めていただくために次回は以下の 8 つの活用シナリオを、手順を交えながら紹介したいと思います。

シナリオ1. Spark でのストリーム処理、IoT、リアルタイム分析
シナリオ2. ヴィジュアルデータ閲覧、インタラクティブ分析
シナリオ3. Spark と NoSQL 連携
シナリオ4. Spark と Azure Data Lake 連携
シナリオ5. Spark と Azure SQL DW 連携
シナリオ6. R Server と MLlib による機械学習
シナリオ7. Jupyter Notebook による分析
シナリオ8. Spark と Excel 連携

関連記事

Comments (0)

Skip to main content