| 原作者 | マテイ・ザハリア |
|---|---|
| 開発者 | アパッチスパーク |
| 初回リリース | 2014年5月26日; 10年前 (2014-05-26) |
| 安定リリース | 3.5.2 ( Scala 2.13) / 2024年8月10日 |
| リポジトリ | Spark リポジトリ |
| 書かれた | スカラ[1] |
| オペレーティング·システム | Microsoft Windows、macOS、Linux |
| 利用可能 | Scala、Java、SQL、Python、R、C#、F# |
| タイプ | データ分析、機械学習アルゴリズム |
| ライセンス | Apache ライセンス 2.0 |
| Webサイト | 出典: |
Apache Spark は、大規模データ処理用のオープンソースの統合分析エンジン です。Spark は、暗黙的なデータ並列処理とフォールト トレランスを備えたプログラミング クラスターのインターフェイスを提供します。Sparkのコードベースは、もともとカリフォルニア大学バークレー校のAMPLabで開発されましたが、その後Apache Software Foundationに寄贈され、それ以来同財団によって維持されています。
概要
Apache Spark のアーキテクチャ基盤は、耐障害性のある方法で維持される、マシンのクラスターに分散された読み取り専用のデータ項目のマルチセットである、復元力のある分散データセット (RDD) です。[2] Dataframe API は RDD 上の抽象化としてリリースされ、その後 Dataset API がリリースされました。Spark 1.x では、RDD が主要なアプリケーション プログラミング インターフェイス(API) でしたが、Spark 2.x では、RDD API が非推奨になっていないにもかかわらず、Dataset API の使用が推奨されています[3]。[4] [5] RDD テクノロジは今でも Dataset API の基盤となっています。[6] [7]
SparkとそのRDDは、分散プログラムに特定の線形データフロー構造を強制するMapReduceクラスターコンピューティングパラダイムの制限に応じて2012年に開発されました。MapReduceプログラムは、ディスクから入力データを読み取り、データ全体に関数をマップし、マップの結果を縮小し、縮小結果をディスクに保存します。SparkのRDDは、(意図的に)制限された形式の分散共有メモリを提供する分散プログラムのワーキングセットとして機能します。[8]
Apache Spark 内では、ワークフローは有向非巡回グラフ(DAG) として管理されます。ノードは RDD を表し、エッジは RDD 上の操作を表します。
Sparkは、データセットをループで複数回訪問する反復アルゴリズムと、インタラクティブ/探索的データ分析、つまりデータベーススタイルのデータの繰り返しクエリの両方の実装を容易にします。このようなアプリケーションのレイテンシは、 Apache Hadoop MapReduceの実装と比較して数桁削減される可能性があります。[2] [9] 反復アルゴリズムのクラスには、機械学習システムのトレーニングアルゴリズムがあり、これがApache Spark開発の最初の推進力となりました。[10]
Apache Sparkには、クラスターマネージャーと分散ストレージシステムが必要です。クラスター管理のために、SparkはスタンドアロンのネイティブSpark、Hadoop YARN、Apache Mesos、Kubernetesをサポートしています。[11]スタンドアロンのネイティブSparkクラスターは、手動で起動することも、インストールパッケージで提供される起動スクリプトを使用して起動することもできます。テスト用にデーモンを単一のマシンで実行することもできます。分散ストレージの場合、SparkはAlluxio、Hadoop Distributed File System (HDFS)、[12] MapR File System (MapR-FS)、[13] Cassandra、[14] OpenStack Swift、Amazon S3、Kudu、Lustre file system、[15]など、さまざまな分散システムとインターフェースすることができ、カスタムソリューションを実装することもできます。Sparkは擬似分散ローカルモードもサポートしています。これは通常、開発やテストの目的でのみ使用され、分散ストレージは必要なく、代わりにローカルファイルシステムを使用できます。このようなシナリオでは、Spark はCPU コアごとに 1 つのエグゼキュータを持つ単一のマシン上で実行されます。
スパークコア
Spark Core はプロジェクト全体の基盤となるものです。分散タスクのディスパッチ、スケジューリング、基本的なI/O機能を提供し、 RDD抽象化を中心としたアプリケーション プログラミング インターフェイス ( Java、Python、Scala、.NET [16]、R用) を通じて公開されます (Java API は他の JVM 言語でも使用できますが、 Julia [17]など、JVM に接続できる他の非 JVM 言語でも使用できます)。このインターフェイスは、関数型/高階プログラミング モデルを反映しています。つまり、「ドライバー」プログラムは、関数を Spark に渡すことで、RDD に対して map、filter、reduce などの並列操作を呼び出し、Spark はクラスター上で関数の実行を並列にスケジュールします。[2]これらの操作、およびjoinsなどの追加の操作は、RDD を入力として受け取り、新しい RDD を生成します。RDD は不変であり、その操作は遅延評価されます。フォールト トレランスは、各 RDD の「系統」(RDD を生成した操作のシーケンス) を追跡することで実現され、データが失われた場合に再構築できます。RDD には、任意のタイプの Python、.NET、Java、または Scala オブジェクトを含めることができます。
RDD指向の機能的なプログラミングスタイルに加えて、Sparkは2つの制限された形式の共有変数を提供します。ブロードキャスト変数はすべてのノードで使用可能である必要がある読み取り専用データを参照し、アキュムレータは命令型スタイルでリダクションをプログラムするために使用できます。[2]
RDD 中心の関数型プログラミングの典型的な例は、一連のテキスト ファイルで出現するすべての単語の頻度を計算し、最も一般的な単語を出力する次の Scala プログラムです。各map、flatMap ( mapのバリアント)、およびReduceByKey は、単一のデータ項目 (または項目のペア) に対して単純な操作を実行する匿名関数を受け取り、その引数を適用して RDD を新しい RDD に変換します。
val conf = new SparkConf (). setAppName ( "wiki_test" ) // Spark 構成オブジェクトを作成します。val sc = new SparkContext ( conf ) // Spark コンテキストを作成します。val data = sc . textFile ( "/path/to/somedir" ) // "somedir" から (ファイル名、コンテンツ) ペアの RDD にファイルを読み取ります。val tokens = data . flatMap ( _ . split ( " " )) // 各ファイルをトークン (単語) のリストに分割します。val wordFreq = tokens . map (( _ , 1 )). ReduceByKey ( _ + _ ) // 各トークンに 1 を追加し、単語の種類ごとにカウントを合計します。wordFreq . sortBy ( s => - s . _2 ). map ( x => ( x . _2 , x . _1 )). top ( 10 ) // 上位 10 個の単語を取得します。単語とカウントを入れ替えてカウント順に並べ替えます。
スパークSQL
Spark SQLはSpark Coreの上位にあるコンポーネントで、DataFramesと呼ばれるデータ抽象化を導入し、[a]構造化データと半構造化データのサポートを提供します。Spark SQLは、 Scala、Java、Python、または.NETでDataFrameを操作するためのドメイン固有言語(DSL)を提供します。[16]また、コマンドラインインターフェイスとODBC / JDBCサーバーを備えたSQL言語サポートも提供します。DataFramesにはRDDが提供するコンパイル時の型チェックがありませんが、Spark 2.0の時点では、厳密に型指定されたDataSetもSpark SQLで完全にサポートされています。
org.apache.spark.sql.SparkSessionをインポートします。
val url = "jdbc:mysql://yourIP:yourPort/test?user=yourUsername;password=yourPassword" // データベース サーバーの URL。val spark = SparkSession . builder (). getOrCreate () // Spark セッション オブジェクトを作成します。
val df = spark.read.format ( "jdbc" ) . option ( " url " , url ) .option ( " dbtable" , " people" ) . load ( )
df . printSchema () // この DataFrame のスキーマを確認します。val countsByAge = df . groupBy ( "age" ). count () // 年齢別に人数をカウントします
// または SQL 経由で:
//df.createOrReplaceTempView("people")
//val countsByAge = spark.sql("SELECT age, count(*) FROM people GROUP BY age")
スパークストリーミング
Spark Streaming は、Spark Core の高速スケジューリング機能を使用してストリーミング分析を実行します。データをミニバッチで取り込み、それらのデータのミニバッチに対して RDD 変換を実行します。この設計により、バッチ分析用に記述された同じアプリケーション コード セットをストリーミング分析で使用できるようになり、ラムダ アーキテクチャの実装が容易になります。[19] [20]ただし、この利便性には、ミニバッチの期間に等しい遅延というペナルティが伴います。ミニバッチではなくイベントごとに処理する他のストリーミング データ エンジンには、StormやFlinkのストリーミング コンポーネントがあります。[21] Spark Streaming には、 Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCP/IP ソケットからの使用がサポートされています。[22]
Spark 2.xでは、ストリーミングをサポートするために、より高レベルのインターフェースを持つ、データセットに基づく構造化ストリーミングと呼ばれる別の技術も提供されています。[23]
Sparkは、従来のオンプレミス データセンターだけでなくクラウドにも導入できます。[24]
MLlib 機械学習ライブラリ
Spark MLlibはSpark Coreをベースにした分散型機械学習フレームワークで、分散メモリベースのSparkアーキテクチャのおかげで、Apache Mahoutが使用するディスクベースの実装よりも最大9倍高速で(MLlib開発者が交代最小二乗法(ALS)実装に対して行ったベンチマークによると、Mahout自体がSparkインターフェースを取得する前)、Vowpal Wabbitよりもスケーラビリティに優れています。[25]多くの一般的な機械学習および統計アルゴリズムが実装されており、大規模な機械学習パイプラインを簡素化するMLlibに同梱されています。
- 要約統計、相関、層別サンプリング、仮説検定、ランダムデータ生成[26]
- 分類と回帰:サポートベクターマシン、ロジスティック回帰、線形回帰、ナイーブベイズ分類、決定木、ランダムフォレスト、勾配ブースティング木
- 交互最小二乗法(ALS)を含む協調フィルタリング技術
- k平均法や潜在ディリクレ配分法(LDA)などのクラスター分析手法
- 特異値分解(SVD)や主成分分析(PCA)などの次元削減技術
- 特徴抽出および変換機能
- 確率的勾配降下法、限定メモリBFGS(L-BFGS)などの最適化アルゴリズム
グラフX
GraphXはApache Spark上の分散グラフ処理フレームワークです。不変のRDDに基づいているためグラフは不変であり、グラフデータベースのようなトランザクション方式はもちろん、更新が必要なグラフには適していません。[27] GraphXは、超並列アルゴリズム( PageRankなど)の実装用に2つの別々のAPIを提供しています。Pregel抽象化と、より一般的なMapReduceスタイルのAPIです。[28] Spark 1.6で正式に非推奨となった前身のBagelとは異なり、GraphXはプロパティグラフ(エッジと頂点にプロパティを添付できるグラフ)を完全にサポートしています。[29]
Apache Sparkと同様に、GraphXは当初カリフォルニア大学バークレー校のAMPLabとDatabricksの研究プロジェクトとして始まり、後にApache Software FoundationとSparkプロジェクトに寄贈されました。[30]
言語サポート
Apache SparkにはScala、Java、SQL、R、Pythonのサポートが組み込まれており、サードパーティによる.NET CLR、[31]、 Julia、[32]などのサポートもあります。
歴史
Sparkは2009年にカリフォルニア大学バークレー校のAMPLabのMatei Zahariaによって最初に開発され、2010年にBSDライセンスの下でオープンソース化されました。[33]
2013年に、このプロジェクトはApacheソフトウェア財団に寄贈され、ライセンスがApache 2.0に切り替えられました。2014年2月、SparkはトップレベルのApacheプロジェクトになりました。[34]
2014年11月、Sparkの創設者M. Zaharia氏の会社Databricksは、Sparkを使用した大規模ソートで新たな世界記録を樹立しました。[35] [33]
Sparkは2015年に1000人を超える貢献者を抱え、[36] Apacheソフトウェア財団で最も活発なプロジェクトの1つとなり、 [37]最も活発なオープンソースのビッグデータプロジェクトの1つとなりました。
Scala バージョン
Spark 3.5.2はScala 2.13をベースにしており(Scala 2.12および2.13でもそのまま動作します)、Scala 3でも動作するようにすることができます。[45]
開発者
Apache Sparkはコミュニティによって開発されています。プロジェクトは「プロジェクト管理委員会」(PMC)と呼ばれるグループによって管理されています。[46]
メンテナンスリリースとEOL
機能リリース ブランチは、通常、バグ修正リリースとともに 18 か月間メンテナンスされます。たとえば、ブランチ 2.3.x は、2018 年 2 月の 2.3.0 リリースから 18 か月後の 2019 年 9 月時点ではメンテナンスされていないと見なされます。その時点以降は、バグ修正であっても、2.3.x リリースは期待できません。
メジャーリリース内の最後のマイナーリリースは、通常、「LTS」リリースとしてより長期間メンテナンスされます。たとえば、2.4.0は2018年11月2日にリリースされ、2021年5月に2.4.8がリリースされるまで31か月間メンテナンスされていました。2.4.8は最後のリリースであり、バグ修正であっても2.4.xリリースは期待できません。[47]
参照
注記
- ^ Spark 1.3以前はSchemaRDDと呼ばれていた[18]
参考文献
- ^ 「Spark リリース 2.0.0」。R
の MLlib: SparkR が MLlib API を提供するようになりました [..] Python: PySpark がさらに多くの MLlib アルゴリズムを提供するようになりました"
- ^ abcd Zaharia, Matei; Chowdhury, Mosharaf; Franklin, Michael J.; Shenker, Scott; Stoica, Ion. Spark: ワーキング セットを使用したクラスター コンピューティング(PDF)。クラウド コンピューティングのホット トピックに関する USENIX ワークショップ (HotCloud)。
- ^ 「Spark 2.2.0 クイックスタート」。apache.org。2017-07-11。2017-10-19に取得。RDDよりも
パフォーマンスが優れているデータセットの使用に切り替えることを強くお勧めします
。 - ^ 「Spark 2.2.0 非推奨リスト」。apache.org。2017年7 月 11 日。2017年 10 月 10 日閲覧。
- ^ Damji, Jules (2016-07-14). 「3 つの Apache Spark API の物語: RDD、データフレーム、データセット: いつ使用するのか、なぜ使用するのか」。databricks.com 。2017年 10 月 19 日閲覧。
- ^ Chambers, Bill (2017-08-10). "12". Spark: The Definitive Guide . O'Reilly Media .
実行するほぼすべての Spark コード (DataFrame または Dataset) は、RDD にコンパイルされます。
[永久リンク切れ] - ^ 「Apache Spark とは? 初心者向け Spark チュートリアル ガイド」janbasktraining.com . 2018-04-13 . 2018-04-13に閲覧。
- ^ Zaharia, Matei; Chowdhury, Mosharaf; Das, Tathagata; Dave, Ankur; Ma, Justin; McCauley, Murphy; J., Michael; Shenker, Scott; Stoica, Ion (2010). 回復力のある分散データセット: インメモリ クラスター コンピューティングのフォールト トレラントな抽象化(PDF)。USENIX Symp. ネットワーク システムの設計と実装。
- ^ Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion (2013 年 6 月). Shark: 大規模な SQL と豊富な分析(PDF) . SIGMOD 2013. arXiv : 1211.6176 . Bibcode :2012arXiv1211.6176X.
- ^ Harris, Derrick (2014年6月28日). 「SparkがHadoopをハイパードライブに変える4つの理由」Gigaom . 2017年10月24日時点のオリジナルよりアーカイブ。 2016年2月25日閲覧。
- ^ 「クラスター モードの概要 - Spark 2.4.0 ドキュメント - クラスター マネージャーの種類」。apache.org。Apache Foundation。2019 年 7 月 9 日。2019 年 7 月 9 日に取得。
- ^ Spark と Hadoop を含む他のオープンソース ソフトウェア プロジェクトとの関係を示す図
- ^ MapR エコシステム サポート マトリックス
- ^ Doan, DuyHai (2014-09-10). 「Re: cassandra + spark / pyspark」. Cassandra ユーザー(メーリング リスト) . 2014 年 11 月 21 日閲覧。
- ^ Wang, Yandong; Goldstone, Robin; Yu, Weikuan; Wang, Teng (2014 年 5 月)。「HPC システムにおけるメモリ常駐 MapReduce の特性と最適化」。2014 IEEE 第 28 回国際並列分散処理シンポジウム。IEEE。pp. 799–808。doi : 10.1109/ IPDPS.2014.87。ISBN 978-1-4799-3800-1. S2CID 11157612。
- ^ ab dotnet/spark、.NET プラットフォーム、2020-09-14、2020-09-14取得
- ^ 「GitHub - DFDX/Spark.jl: Apache Spark の Julia バインディング」。GitHub。2019年5月 24 日。
- ^ 「Spark リリース 1.3.0 | Apache Spark」。
- ^ 「Spark、Kafka、Cassandra を使用した Lambda アーキテクチャの適用 | Pluralsight」www.pluralsight.com 。2016年 11 月 20 日閲覧。
- ^ Shapira, Gwen (2014 年 8 月 29 日)。「Spark Streaming を使用した Lambda アーキテクチャの構築」。cloudera.com。Cloudera。2016年 6 月 14 日時点のオリジナルからのアーカイブ。2016年6 月 17 日閲覧。
バッチ アプリケーション用に作成したのと同じ集計をリアルタイム データ ストリームで再利用します。
- ^ Chintapalli, Sanket; Dagit, Derek; Evans, Bobby; Farivar, Reza; Graves, Thomas; Holderbaugh, Mark; Liu, Zhuo; Nusbaum, Kyle; Patil, Kishorkumar; Peng, Boyang Jerry; Poulosky, Paul (2016 年 5 月)。「ストリーミング計算エンジンのベンチマーク: Storm、Flink、Spark ストリーミング」。2016 IEEE国際並列分散処理シンポジウム ワークショップ (IPDPSW)。IEEE。pp. 1789–1792。doi :10.1109/IPDPSW.2016.138。ISBN 978-1-5090-3682-0.S2CID 2180634 。
- ^ Kharbanda, Arush (2015 年 3 月 17 日). 「Spark Streaming へのデータの取り込み」. sigmoid.com . Sigmoid (カリフォルニア州サニーベールの IT 製品会社)。2016 年 8 月 15 日時点のオリジナルよりアーカイブ。2016年7 月 7 日閲覧。
- ^ Zaharia, Matei (2016-07-28). 「Apache Spark の構造化ストリーミング: ストリーミング用の新しい高レベル API」. databricks.com . 2017-10-19に閲覧。
- ^ 「オンプレミスとクラウドのデータウェアハウス:長所と短所」。SearchDataManagement 。2022年10月16日閲覧。
- ^ Sparks, Evan; Talwalkar, Ameet (2013-08-06). 「Spark Meetup: MLbase、Spark による分散機械学習」. slideshare.net . Spark ユーザー ミートアップ、カリフォルニア州サンフランシスコ。 2014 年2 月 10 日閲覧。
- ^ 「MLlib | Apache Spark」. spark.apache.org . 2016年1月18日閲覧。
- ^ Malak, Michael (2016 年 6 月 14 日). 「GraphX と GraphFrames でのグラフ同型性の検出: グラフ処理とグラフ データベース」. slideshare.net . sparksummit.org . 2016 年7 月 11 日閲覧。
- ^マラック、マイケル(2016年7月1日) 。Spark GraphX in Action。マニング。p.89。ISBN 9781617292521Pregel
とその小さな兄弟であるaggregateMessages()はGraphXのグラフ処理の基礎です。...終了条件にさらに柔軟性を必要とするアルゴリズムはaggregateMessages()を使用して実装する必要があります。
- ^ Malak, Michael (2016 年 6 月 14 日). 「GraphX と GraphFrames でのグラフ同型性の検出: グラフ処理とグラフ データベース」. slideshare.net . sparksummit.org . 2016 年7 月 11 日閲覧。
- ^ Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion (2014 年 10 月)。GraphX: 分散データフロー フレームワークでのグラフ処理(PDF)。OSDI 2014。
- ^ 「Apache Spark 向け .NET | ビッグデータ分析」。2019 年 10 月 15 日。
- ^ “Spark.jl”. GitHub . 2021年10月14日.
- ^ ab Clark, Lindsay. 「Apache Spark がビッグデータの意思決定をスピードアップ」。ComputerWeekly.com。2018年5 月 16 日閲覧。
- ^ 「Apache Software Foundation が Apache™ Spark™ をトップレベル プロジェクトとして発表」。apache.org。Apache Software Foundation。2014 年 2 月 27 日。2014年3 月 4 日閲覧。
- ^ Sparkが大規模ソートの新記録を樹立
- ^ Open HUB Spark 開発活動
- ^ 「Apache Software Foundation が Apache™ Spark™ をトップレベル プロジェクトとして発表」。apache.org。Apache Software Foundation。2014 年 2 月 27 日。2014年3 月 4 日閲覧。
- ^ 「Spark 2.4.8 リリース」。spark.apache.org。2021年8月25日時点のオリジナルよりアーカイブ。
- ^ 「Spark 3.0.3 リリース」。spark.apache.org。
- ^ “Spark 3.1.3 リリース”. spark.apache.org . 2022年6月18日時点のオリジナルよりアーカイブ。
- ^ 「Spark 3.2.4 リリース」。spark.apache.org。
- ^ 「Spark 3.3.3 リリース」。spark.apache.org。
- ^ 「Spark 3.4.3 リリース」。spark.apache.org。
- ^ 「Spark 3.5.2 リリース」。spark.apache.org。
- ^ 「Spark で Scala 3 を使用する」。47 Degrees。2022年7 月 29 日閲覧。
- ^ 「Apache 委員会情報」。
- ^ 「バージョン管理ポリシー」. spark.apache.org .
外部リンク
- 公式サイト
