Apache Sparkとは?

Sparkは分散型のインメモリコンピューティングフレームワークで、データの取り込み、分析、クエリを行うためのプラットフォームです。Java、Scala、Python、Rの高レベルAPIに加えて、Spark SQL (構造化データ)、MLlib(機械学習)、GraphX(グラフデータ)、Spark Streaming(マイクロバッチデータストリーム)といったアプリケーションからなる広範なエコシステムを持ち合わせています。​​​​​​​

2009年にカリフォルニア大学バークレー校で開発されたApacheSparkは、規模の極めて大きいデータセットに対してインタラクティブにクエリや分析を実行する際に最適です。AWSのElastic MapReduceDatabricks、またオンプレミスのクラウドで利用でき、拡張してマシンを数千台に増やせばペタバイト規模のデータにも対応します。

Apache Sparkの使用事例

柔軟性

プラットフォームであるSparkには、数多くのAPIと広範なアプリケーションエコシステムが備わっており、さまざまなデータセットで万全に機能します。こうしたことからSparkは、ひとつの部門内のさまざまな事業分野(データエンジニアリング、データサイエンス、分析、ビジネスインテリジェンス)で運用することができます。

Sparkは、既存のインフラストラクチャへの組み込みが簡単で、YARNやMesosをはじめスタンドアロンモードでも稼働させられることから、すでにHadoopクラスタに時間とコストを投じている場合に絶好の選択肢となります。また、AWS Elastic Mapreduce(EMR)を使用して簡単に構築できるため、単発のバッチジョブやスケジュールされたバッチジョブを実行する際にやや低コストで済みます。

実績の長いSQL構文

Spark 2.0はANSI SQL:2003規格に適合しています。つまり、Spark SQLは他の言語では対応できないSQL処理を行えます。

大規模な開発者ネットワーク

Sparkは開発者やベンダーから多大なサポートを受けているため、迅速かつ継続的な開発サイクルが実現します。

Sparkが実際に役立つ事例

ごく小規模の分析クエリ

Spark SQLは、特に小さな分析クエリで優れたパフォーマンスを発揮します。Hadoopソリューションに力を入れているビジネスインテリジェンスベンダー、Altscaleが最近ベンチマークテストでImpalaとHive(Tez)、Spark、Prestoを比較したところ、Sparkが(Impalaとともに)より小さいデータセットに対して特に優れた性能を示すことが分かりました。

非常に大きな分析クエリ

またSparkは、10億行におよぶ非常に大きなデータセットの処理にも最適です。たとえば、10億行のテーブルを結合したときのパフォーマンスはSparkがどのSQLエンジンよりも優れていたほか、AltScaleが2016年に実施した非常に大きなデータセットでのベンチマークテストでも、Sparkが他のSQLエンジンをすべて上回りました。

データサイエンスのワークフロー

Sparkは、データサイエンティストのツールキットに含まれるR(SparkR)やPython(PySpark)など、他のツールとシームレスに統合します。また、機械学習ライブラリ(MLib)が付属するため、Hadoopに保存されたデータの探索に関心のあるデータサイエンティストにとって魅力的な存在になっています。

料金に関する考慮事項​​​​​​​

Sparkを提供するベンダーは、DatabricksAmazon Web Servicesです。​​​​​​​

DatabricksのSparkの料金は使い方次第で、無料トライアルのリクエストも受け付けています。Databricksの料金モデルは以下の通りです。

  • コミュニティ: 無料
  • Databricksデータエンジニアリング(スケジュールされたサービス)
  • Databricksデータ分析(Databricksノートブック内の機能を使用)
  • エンタープライズ(エンタープライズ向けのセキュリティ機能が充実)

Amazon ElasticMapReduce(EMR)クラスタを作成して、異なる料金の構成オプションを多数利用することもできます。Sparkがインメモリデータベースであることから、メモリの最適化されたインスタンスのタイプを選ぶのが賢明と言えます。

Hadoop Sparkのアーキテクチャ

データの種類

SparkのコアAPIは、非構造化データ、半構造化データ、構造化データの処理が可能で、なかでもSpark SQLは、スキーマの存在する半構造化データと構造化データで動作します。Sparkのネイティブデータ構造は、復元力のある分散データセット(RDD)で、これは効果的に分散されたフォールトトレラントなデータの集まりです。そして「データフレーム」は、SparkとSpark SQLの共通言語です。データに列構造をもたらし、RおよびPython(Pandas)両方のデータフレームに類似しています。

推奨される最大データサイズ

Sparkは理論上、数千台のマシンにまで拡張でき、ビッグデータ(ペタバイト規模)にも対応します。また、Avroや、テキスト、列形式を取り込めるため、さまざまなタイプの構造化データを扱うことができます。

Sparkを利用する

新規データの処理

Sparkでは、JSONまたは区切りテキストファイルパーサーを使用して、新しいデータをSpark SQLに直接読み込むことができます。ファイルの場合は、ローカルのファイルシステム、HDFS、S3、RDBMSなどから読み込みます。DatabricksはRedshift-to-Sparkツールをリリースしており、このツールを使ってAmazon RedshiftからS3を介してデータをSparkに移行し、あらゆる方法でクエリを実行することができます。

また、パイプラインを設定することも可能です。まずパイプラインでSparkかSpark Streamingを使用して非構造化データを処理し、データに明示的なスキーマを定義して、データフレームに変換します。続いて、BeelineまたはJDBCを介してアプリケーションを投入すれば、Spark Shellなど多数のドライバープログラムで構造化データのクエリを実行できます。

メンテナンス

Sparkには、パフォーマンスのチューニング用に多数のパラメータと構成があるため、初めてのユーザーは少し圧倒されるかもしれません。Sparkはもちろんデフォルト設定で稼働しますが、パフォーマンスを最適なものにするにはチューニングが必要でしょう。

ほとんどのBIツールはJDBCかODBC経由で接続するため、ScalaやPython、データフレームの処理は発行することができません。その代わり、HiveメタストアにSQLを発行しますが、それは同時にSparkや希望するBIツールに期待する柔軟性を低下させることになります。つまり、BIツールは、基底にあるデータを処理するスキーマを把握しなければなりません。

アナリティクスを快適に

ビジネスインテリジェンス、ビッグデータ分析、顧客の360°ビュー。
Lookerはお客様のどんなニーズにもお応えします。当社のデータエキスパートにご相談ください。

デモをリクエスト