Apache Spark
Apache Sparkは、機械学習とAIアプリケーションのための非常に高速なオープンソースのデータ処理エンジンで、ビッグデータにおいて最大のオープンソース・コミュニティーによって支えられています。
黒と青の抽象的なイメージ
Apache Sparkとは

Apache Sparkは、機械学習とAIアプリケーションのための非常に高速なオープンソースのデータ処理エンジンで、ビッグデータにおいて最大のオープンソース・コミュニティーによって支えられています。

Apache Spark(Spark)は、大規模なデータ・セット用のオープンソースのデータ処理エンジンです。 ビッグデータ(特に、ストリーミング・データ、グラフ・データ・機械学習、および人工知能(AI)アプリケーション)に必要な計算速度、拡張性、およびプログラマビリティーを提供するように設計されています。

Sparkの分析エンジンは、他のエンジンよりも10倍から100倍の速さでデータを処理します。 並列処理とフォールト・トレランスの機能が組み込まれており、コンピューターの大規模クラスター全体で処理作業を分散することによって拡張します。 データ・アナリストやデータ・サイエンティストの間で人気のあるプログラミング言語(Scala、Java、Python、Rなど)のAPIも組み込まれています。

Sparkはしばしば、Apache Hadoop、特にMapReduce(Hadoopのネイティブ・データ処理コンポーネント)と比較されます。 SparkとMapReduceの主な相違点としては、Sparkは後続ステップのために(ディスクへの書き込みやディスクからの読み取りはせずに)メモリー内でデータを処理し、保持することです。これにより、処理が劇的に高速化されました。 (SparkがどのようにHadoopと比較されるか、またHadoopを補足するかについては、この記事の別の個所で説明しています。)

Sparkは2009年にカリフォルニア大学バークレー校で開発されました。 Sparkは現在、The Apache Software Foundationによって維持され、ビッグデータにおいて最大(寄稿者1,000人超)のオープンソース・コミュニティーを持っています。 また、いくつかの商業用ビッグデータ・オファリングのコア・コンポーネントとして組み込まれています。

最良のデータレイクを構築することは、正しいオブジェクト・ストレージを選択することを意味します。Apache Sparkはこの分野で強力なサポートを提供することができます。

電子書籍を読む(909 KB)

Apache Sparkの仕組み

Apache Sparkは階層型マスター/スレーブ・アーキテクチャーを備えています。 Spark Driver は、クラスター・マネージャーを制御するマスター・ノードです。クラスター・マネージャーは、ワーカー(スレーブ)ノードを管理し、データ結果をアプリケーション・クライアントに配信します。

アプリケーション・コードに基づいて、Spark DriverはSparkContext を生成します。これはクラスター・マネージャー(SparkのStandalone Cluster Manager、またはHadoop YARN、Kubernetes、Mesosなどの他のクラスター・マネージャー)と連携して、各ノードに対して実行を分散し、モニターします。 また、耐障害性分散データセット(RDD)を作成します。これは、Sparkの驚異的な処理速度を実現する上で重要です。

耐障害性分散データセット(RDD)

 

耐障害性分散データセット(RDD)は、クラスター内の複数ノード間で分散でき、並列で動作可能な要素のフォールト・トレラントのコレクションです。 RDDはApache Sparkの基礎構造です。

Sparkは、データ・ソースを参照したり、SparkContext並列化方式で既存のコレクションを並列化したりすると、データを処理のためにRDDにロードします。 データがRDDにロードされると、Sparkはメモリー内でRDDに対して変換およびアクションを実行します(これがSparkの速度にとって重要です)。 Sparkはまた、システムがメモリーを使い尽くしたり、ユーザーがパーシスタンスのためにデータをディスクに書き込むようにしたりしない限り、データをメモリー内に格納します。

RDD内の各データ・セットは、論理区画に分割され、クラスターのさまざまなノードで計算できます。 また、ユーザーは2つのタイプのRDD操作( 変換とアクション)を実行できます。 変換は、新しいRDDの作成に適用される操作です。 アクションは、計算を適用し、結果をドライバーに戻すようにApache Sparkに指示するために使用されます。

Sparkは、RDDに対するさまざまなアクションや変換をサポートします。 この分散はSparkによって行われるため、ユーザーは正しい分散の計算に関して心配する必要はありません。

有向非巡回グラフ(DAG)

 

MapReduceでの2ステージ実行プロセスとは対照的に、Sparkは有向非巡回グラフ(DAG)を作成して、タスクおよび、クラスターのワーカー・ノードのオーケストレーションをスケジュールします。 Sparkはタスク実行プロセスでアクションを実行し、データを変換するため、DAGスケジューラーはクラスターのワーカー・ノードをオーケストレーションすることによって効率性を促進します。 このタスク・トラッキングは、記録された操作を以前の状態のデータに再適用するため、フォールト・トレランスが有効になります。

データフレームとデータ・セット

 

RDDに加えて、Sparkは他の2つのデータ・タイプ(データフレームとデータ・セット)を扱います。

データフレームは、最も一般的な構造化アプリケーション・プログラミング・インターフェース(API)であり、行と列を持つデータのテーブルを表します。 RDDはSparkに不可欠な機能でしたが、現在は保守モードになっています。 SparkのMachine Learning Library(MLlib)の人気により、データフレームはMLlibのプライマリーAPIとして主導的役割を担ってきました。 このことは、MLlibのAPIを使用する際に覚えておくべきことです。というのは、データフレームは、さまざまな言語(Scala、Java、Python、Rなど)にわたる統一性をもたらすためです。

データ・セットは、データフレームの拡張であり、タイプ・セーフで、オブジェクト指向のプログラミング・インターフェースを提供します。 データ・セットはデフォルトでは、データフレームとは異なり、強く型付けされたJVMオブジェクトのコレクションです。

Spark SQLは、データフレームおよびSQLデータ・ストア(Apache Hiveなど)からのデータ照会を可能にします。 Spark  SQL照会は、他の言語内で実行されると、データフレームまたはデータ・セットを返します。

Spark Core

 

Spark Coreは、すべての並列データ処理の基礎であり、スケジューリング、最適化、RDD、およびデータ抽象化を扱います。 Spark Coreは、Sparkライブラリー、Spark SQL、Spark Streaming、MLlib機械学習ライブラリー、およびGraphXグラフ・データ処理の機能的な基盤を提供します。 Spark Coreおよびクラスター・マネージャーは、Sparkクラスター全体にデータを分散し、抽象化します。 この分散と抽象化により、ビッグデータの処理が非常に高速になり、かつユーザーにとって使いやすいものになります。

Spark API

 

Sparkは、Sparkの能力を広範なユーザーに提供するためのさまざまなアプリケーション・プログラミング・インターフェース(API)を備えています。 Spark SQLは、RDDデータと相関的な方法で対話することを可能にします。 Sparkはまた、Scala、Java、Python、およびR用に文書化されたAPIを備えています。Sparkの各言語のAPIは、データの処理方法において特定のニュアンスを持っています。 RDD、データフレーム、およびデータ・セットが、各言語APIで使用できます。 このように豊富な言語のAPIによって、Sparkは、開発、データサイエンス、および統計に関する経験を持つ多様なグループの人々がビッグ データにアクセスできるようにします。

注目の製品

Analytics Engine

Apache Sparkと機械学習

Sparkは、機械学習、人工知能(AI)、およびストリーム処理へと機能を拡張した、さまざまなライブラリーを備えています。

Apache Spark  MLlib

 

Apache Sparkの重要な能力の1つに、Spark MLlibで使用可能な機械学習機能があります。 Apache Spark  MLlibは、分類と回帰、協調フィルタリング、クラスター化、分散線形代数、決定木、ランダム・フォレスト、勾配ブースト・ツリー、頻出パターン抽出、評価測定基準、および統計を行うためにすぐに使用可能なソリューションを備えています。 Sparkが処理可能な各種データ・タイプと結合されたMLlibの機能により、Apache Sparkは不可欠なビッグデータ・ツールとなります。

Spark GraphX

 

APIの機能に加えて、Sparkには、グラフ問題を解決するように設計されたSpark GraphXが新たに追加されました。 GraphXは、RDDをグラフおよびグラフ並列計算用に拡張したグラフ抽象化です。 Spark GraphXは、ソーシャル・ネットワークなどの相互接続性情報や接続網情報が格納されたグラフ・データベースと統合されています。

Spark Streaming

 

Spark Streamingは、ライブ・データ・ストリームのスケーラブルなフォールト・トレラント処理を可能にする、コアとなるSpark APIの拡張機能です。 Spark Streamingはデータの処理時に、Sparkの機械学習およびグラフ処理アルゴリズムを使用したリアルタイム・ストリーミング分析のために、データをファイル・システム、データベース、およびライブ・ダッシュボードに分配することができます。 Spark SQLエンジン上に構築されたSpark Streamingは、ストリーミングされたデータの高速処理を可能にする、インクリメンタル・バッチ処理を行うことができます。

関連リンク

Hadoop

ビッグデータ分析

SparkとApache HadoopおよびMapReduce

「SparkとHadoop」はWebでよく検索される用語ですが、上記のとおり、Sparkは Hadoop(具体的にはHadoopのネイティブ・データ処理コンポーネントであるMapReduce)よりも強化されています。 実際に、SparkはMapReduceフレームワーク上に構築されており、現在ほとんどのHadoopディストリビューションにはSparkが含まれています。

Sparkと同様に、MapReduceを使用してプログラマーは、コンピューターの大規模クラスター全体でデータ・セットを部分的に並列処理することにより、大量のデータ・セットを高速処理するアプリケーションを作成することができます。 ただし、MapReduceはディスク上のデータを処理し、読み取り/書き込みを行うのに時間がかかり処理が遅くなりますが、Sparkは計算をメモリー で行うため、はるかに高速です。 結果として、SparkはMapReduceの最大100倍の速度でデータを処理できます。 

Sparkの複数言語用の組み込みAPIは、開発者にとってMapReduceよりも実用的で親しみやすいものです。MapReduceでのプログラム作成は難しいとの評判があります。 MapReduceとは異なり、Sparkは、Hadoopのリソース管理およびジョブ・スケジューリングのフレームワークであるYARNを使用して、Hadoopクラスター上でストリーム処理アプリケーションを実行できます。 上記のとおり、SparkにはMLlib、GraphX、およびSparkSQLの機能が加わっています。 また、Sparkは Hadoop Application(Apache Kafkaなど)の外部にある他のデータ・ソースからのデータを扱うことができます。

その他の点では、SparkはHadoopと互換性があり、Hadoopを補完します。 SparkはHadoopデータ(HDFS(Hadoop Distributed File System)、HBase(HDFS上で稼働する非リレーショナル・データベース)、Apache Cassandra(HDFSのNoSQL代替)、およびHive(Hadoopベースのデータウェアハウス)からのデータなど)を処理できます。

関連ソリューション
AIOps

分析、人工知能、その他のテクノロジーを活用してIT運用をより効率的かつ効果的なものにする分野としてのAIOpsについて説明します。

AIOpsの詳細はこちら
IBM Spectrum Conductor

オンプレミスとクラウドの両方で、エンタープライズのマルチテナント環境にIBM Spectrum Conductorおよびその他のサービスを自信を持って導入できます。

IBM Spectrum Conductorの詳細はこちら
IBM Analytics Engine

Analytics Engineは、分析アプリケーション作成用のApache SparkおよびApache Hadoopの統合サービスです。

IBM Analytics Engineの詳細はこちら
詳細情報はこちら

Sparkは、ビッグデータ分析に役立ち、企業のデータ・ソリューションにさらに充実した機能を付加する強力なツールです。 既存のIBMのビッグデータ・ソリューションともうまく結合します。
 IBM Spectrum Conductorは、共通のリソース共有クラスター上にApache Sparkおよびその他のアプリケーション・フレームワークを導入および管理するためのマルチテナント・プラットフォームです。 Spectrum Conductorは、ワークロード管理、モニタリング、アラート、レポート、および診断の機能を備えており、Sparkおよびその他のフレームワークの現行バージョンや異なる複数のバージョンを並行して実行することができます。 ユーザーは、統合されたSparkディストリビューションを使用して、Apache Sparkを簡単にデプロイし、維持することができます。


IBM Spectrum Conductorの詳細はこちら