こんばんは。ここ数日Databricks社が公開する論文や公開記事を追いかけています。
今日は、2016年11月に公開された「Apache Spark: A Unified Engine for Big Data Processing」を読んでみたので、その日本語要約(Powered by ChatGPT)をメモしておきます。
原文はこちらから確認できます。
Apache-Spark-A-Unified-Engine-for-Big-Data-Processing.pdf (databricks.com)
Databricks社が公開するResearch記事の一覧はこちらから確認できます。
Databricks Research | Databricks
それではまいります。
Contents
日本語要約 powered by ChatGPT
Introduction
- データ量の増加が産業と研究に大きな機会と計算上の課題をもたらしている。
- 単一のマシンの能力を超えたため、ユーザーは計算を複数のノードにスケーリングする新しいシステムが必要とされており、さまざまな計算ワークロードを対象とした新しいクラスタープログラムモデルが登場している。
- Apache Sparkプロジェクトは、分散データ処理のための統一エンジンを設計するために2009年に開始され、RDDs(Resilient Distributed Datasets)と呼ばれるデータ共有抽象化を使用して、SQL、ストリーミング、機械学習、グラフ処理など、以前は別々のエンジンが必要だった幅広い処理ワークロードをキャプチャできるようになった。
- Sparkの汎用性は、アプリケーションの開発を容易にし、処理タスクを効率的に組み合わせるのに役立ち、以前のシステムでは不可能だった新しいアプリケーションを可能にする。
- Sparkは、オープンソースのビッグデータ処理の最も活発なプロジェクトの1つとなり、1000以上の組織で使用されている。最大の展開は8000以上のノードを持つ。
- Sparkの汎用性は、処理関数の組み合わせ可能性が非常に重要であり、データのコピーを避けつつライブラリ関数を効果的に組み合わせるための抽象化が必要である。
- 記事では、Sparkプログラミングモデルとその高度な汎用性について説明し、その汎用性を活用して他の処理タスクをどのように構築したかを説明し、最も一般的なSparkのアプリケーションを要約し、プロジェクトの進行中の開発作業について説明している。
Programming Model
- Sparkの主要なプログラミング抽象化はRDD(Resilient Distributed Datasets)であり、これはクラスター全体に分散されたオブジェクトのフォルトトレラントなコレクションで、並列に操作できる。
- ユーザーは、データに対して「変換」と呼ばれる操作(map、filter、groupByなど)を適用してRDDを作成する。
- Sparkは、Scala、Java、Python、Rの関数型プログラミングAPIを介してRDDsを公開し、ユーザーはクラスター上で実行するためにローカル関数を単純に渡すことができる。
- RDDは遅延評価され、アクションが呼び出されると、Sparkは計算の効率的な計画を見つけることができる。
- RDDのデータ共有がSparkとMapReduceなどの以前の計算モデルとの主要な違いであり、対話型クエリや繰り返しアルゴリズムなどで大きな高速化を提供し、Sparkの汎用性の鍵でもある。
- RDDは障害から自動的に回復し、データレプリケーションやチェックポイントではなく「ラインリエージ(lineage)」と呼ばれるアプローチを使用している。各RDDは、それを構築するために使用された変換のグラフを追跡し、失われたパーティションを再構築する。
- Sparkは永続的なストレージシステムと統合されており、HDFSやS3、Cassandraなどのクラスターファイルシステムやキーバリューストアと共に使用できる。
- Sparkは既存のデータと異なるデータソースを結合し、多様なデータソースに対して計算を実行することが容易である。
High-Level Libraries
- SparkのRDDプログラミングモデルは、分散オブジェクトのコレクションとそれらのオブジェクト上で実行する関数のみを提供する。
- RDDを使用して、Spark上に多くの専門的な計算エンジンのユースケースを対象とする高度なライブラリを構築している。これらのライブラリは、データ構造、データのノード間分割、それに適用される関数を制御することで、他のエンジンの実行技術の多くを実装できる。
- 主要なライブラリには、Spark SQLとDataFramesに含まれる4つの主要なライブラリがあり、リレーショナルクエリ、ストリーム処理、グラフ計算、機械学習などの用途を対象としている。
- Spark SQLはリレーショナルクエリを実行し、Spark内部のRDD内に圧縮された列形式のデータを使用しています。また、DataFramesと呼ばれる基本的なデータ変換の高水準抽象化を提供します。
- Spark Streamingは、インクリメンタルなストリーム処理を実装し、小さなバッチにデータを分割し、定期的に新しい結果を生成します。これにより、障害回復が効率的に行えるなど、伝統的な分散ストリーミングシステムよりも多くの利点があります。
- GraphXは、グラフ計算のためのインターフェースを提供し、PregelやGraphLabなどと同様の最適化を実装しています。
- MLlibは、分散モデルトレーニングのための一般的なアルゴリズムを実装しており、さまざまな機械学習タスクをサポートしています。
- これらのライブラリはすべてRDDをデータ抽象化として使用し、アプリケーションで簡単に組み合わせることができます。さらに、Sparkは処理ライブラリを効率的に組み合わせることができ、アプリケーション全体で最適化を行うことができます。
- これらのライブラリは、RDDモデル内で最適化を実装することにより、専門的なエンジンとほぼ同等のパフォーマンスを達成できることが示されています。特定のタスクに対するSparkのパフォーマンスは、他の専門的なシステムとほぼ同等であり、競争力のあるベンチマークでも高いパフォーマンスを実現しています。
Applications
- Apache Sparkは、Webサービスからバイオテクノロジー、金融など、さまざまな領域で幅広いアプリケーションで使用されています。調査によれば、Sparkを使用している企業は1,000以上あり、これらのユーザーはSparkの汎用性を活用し、多くの場合、複数のSparkライブラリを組み合わせて利用しています。
- 主要な使用ケースには、バッチ処理、インタラクティブなクエリ、ストリーム処理、科学的アプリケーションなどがあります。
- バッチ処理では、大規模データセットの処理、データ変換、オフラインでの機械学習モデルのトレーニングなどが一般的で、例としてはYahoo!のページ個別の推薦、Goldman Sachsのデータレイク管理、Alibabaのグラフ探索、金融リスク計算、Toyotaの顧客フィードバックのテキストマイニングなどが挙げられます。最大の公表されたユースケースの一つは、中国のソーシャルネットワークTencentでの1PBのデータを1日に8,000ノードのクラスタで取り込むものです。
- インタラクティブなクエリでは、Spark SQLを使用してリレーショナルクエリを実行する企業や、Scala、Python、Rなどのインタラクティブなシェルやノートブック環境を使用して開発者とデータサイエンティストが対話的にSparkを使用しています。さらに、Spark上で動作するドメイン固有の対話型アプリケーションも存在します。
- ストリーム処理では、リアルタイムデータ処理やリアルタイムの意思決定アプリケーションで広く使用されており、例としてはCiscoのネットワークセキュリティモニタリング、Samsung SDSの予防的なアナリティクス、Netflixのログマイニングなどが挙げられます。これらのアプリケーションでは、ストリーミングをバッチ処理やインタラクティブなクエリと組み合わせて使用することもあります。
- 科学的アプリケーションでは、スパム検出、画像処理、遺伝子データ処理など、さまざまな分野でSparkが使用されています。例として、Howard Hughes Medical InstituteのJanelia Farmでの神経科学のためのThunderプラットフォームがあり、リアルタイムで実験の脳イメージングデータを処理し、機械学習アルゴリズムを適用して特定の行動に関与するニューロンを特定するのに使用されています。
- Sparkのコンポーネントの使用状況は多様で、組織は通常複数のコンポーネントを組み合わせて使用しています。 Sparkの利用者調査によれば、60%以上の組織が少なくとも3つのSparkのAPIを使用しており、Spark CoreとSQLが最も人気のあるコンポーネントです。ストリーミングは46%の組織で使用され、機械学習は54%で使用されています。
- Sparkアプリケーションは、Hadoop環境だけでなく、パブリッククラウドなどさまざまな環境で実行されており、データソースとの接続も多様化しています。Sparkの展開はますます多様化しており、Hadoop YARNクラスターマネージャー上での展開は40%にとどまっており、52%の回答者がパブリッククラウド上でSparkを実行しています。
Why Is the Spark Model General?
- Apache Sparkは、RDD(Resilient Distributed Datasets)を通じたクラスタープログラムモデルの一般性を示し、一般的な特性を持つことが可能です。RDDは、分散計算を効率的にエミュレートできる一方、ネットワークの遅延に敏感でない場合に高効率で動作します。
- RDDはMapReduceモデルに基づいており、MapReduceは理論的には任意の分散計算をエミュレートできますが、効率が低いことがあります。RDDおよびSparkは、データ共有を高速化し、ネットワークの遅延を低減させることで、このエミュレーションを効率的に行えるようにします。
- システムの観点から、RDDはアプリケーションに対してネットワークとストレージI/Oといったクラスター内の主要なボトルネックリソースの制御を提供し、特化したシステムと同じ最適化を表現できます。RDDはネットワーク遅延を増加させる可能性がある唯一の領域で、通信ステップでの同期に起因しています。
- Sparkは特化したシステムと同じアルゴリズムとライブラリを実行でき、ネットワークとI/O帯域幅以外のボトルネックはCPU時間であるため、多くのデータインテンシブなワークロードで競争力があります。故障耐性に起因するいくつかの追加コストが発生する可能性がありますが、これは特にI/O操作に制約のあるアプリケーションに影響を与えません。
Ongoing Work
- Apache Sparkは着実に進化し、業界と研究からの多くの貢献があります。特に以下の4つの主要な取り組みが注目されています。
- DataFramesとより宣言的なAPI: DataFramesは、表形式のデータを扱う共通のAPIで、最適化が容易です。また、静的に型付けされたインターフェースであるDatasetも提供されています。
- パフォーマンス最適化: Sparkは、ネットワークやI/Oプリミティブの最適化に力を入れ、大規模なデータ処理を高速化しています。特に、Project Tungstenによる最適化が注目されています。
- R言語サポート: SparkRプロジェクトにより、R言語を使用したプログラミングが可能になりました。また、他のSparkライブラリとも連携が容易です。
- 研究ライブラリ: Sparkはさまざまな研究プロジェクトに利用されており、神経科学、ゲノミクス、天文学などの領域で高レベルのデータ処理ライブラリが開発されています。
- Apache Sparkは、その柔軟性と高性能を維持しながら、新たな機能と性能向上に取り組み続けています。
Conclusion
- スケーラブルなデータ処理は、次世代のコンピュータアプリケーションに不可欠ですが、通常、異なるコンピューティングシステムで異なる処理ステップを組み合わせる複雑な作業を伴います。この課題を単純化するために、Sparkプロジェクトはビッグデータアプリケーション向けの統一プログラミングモデルとエンジンを導入しました。私たちの経験から、このようなモデルは現在のワークロードを効率的にサポートし、ユーザーに大きな利益をもたらすことが示されています。
- Apache Sparkは、ビッグデータ向けのプログラミングライブラリにおいて、組み合わせ可能性の重要性を強調し、より簡単に互換性のあるライブラリの開発を奨励しています。
論文を読んでみて
ChatGPTから本記事を以下のようにまとめてくれています。
感想も届きましたので共有します。
少しでも参考になりましたら幸いです。
おしまい
コメントを残す