Apache Spark


Apache_Spark

Apache Sparkは、大規模なデータ処理のためのオープンソースの統合分析エンジンです。Sparkは、暗黙的なデータ並列性とフォールトトレランスを備えたクラスター全体をプログラミングするためのインターフェースを提供します。もともとカリフォルニア大学バークレー校のAMPLabで開発された、Sparkコードベースは後にApache Software Foundationに寄贈され、それ以来それを維持しています。 Apache Spark 原作者
マテイ・ザハリア
開発者 Apache Spark 初回リリース
2014年5月26日; 7年前 (2014-05-26)
安定リリース
3.1.1 / 2021年3月2日 ; 6ヶ月前  (2021-03-02)
リポジトリ
Sparkリポジトリ
で書かれている
スカラ
オペレーティング・システム
Microsoft Windows、macOS、Linux
で利用可能
Scala、Java、SQL、Python、R、C#、F#
タイプ
データ分析、機械学習アルゴリズム
ライセンス
Apacheライセンス2.0
Webサイト
spark .apache .org

コンテンツ
1 概要
1.1 Spark Core 1.2 Spark SQL 1.3 SparkStreaming 1.4 MLlib機械学習ライブラリ 1.5 GraphX 1.6 言語サポート
2 歴史
2.1 開発者
3 も参照してください
4 ノート
5 参考文献
6 外部リンク

概要
Apache Sparkは、フォールトトレラントな方法で維持される、マシンのクラスターに分散された読み取り専用のデータ項目のマルチセットである復元力のある分散データセット(RDD)にアーキテクチャの基盤を持っています。 Dataframe APIは、RDDの上に抽象化としてリリースされ、続いてDatasetAPIがリリースされました。Spark 1.xでは、RDDが主要なアプリケーションプログラミングインターフェイス(API)でしたが、Spark 2.x以降、RDD APIは非推奨ではありませんが、データセットAPIの使用が推奨されています。 RDDテクノロジーは依然としてDatasetAPIの基礎となっています。
SparkとそのRDDは、分散プログラムに特定の線形データフロー構造を強制するMapReduceクラスターコンピューティングパラダイムの制限に対応して2012年に開発されました。MapReduceプログラムは、ディスクから入力データを読み取り、データ全体に関数をマッピングし、結果を削減します。マップし、削減結果をディスクに保存します。SparkのRDDは、(意図的に)制限された形式の分散共有メモリを提供する分散プログラムのワーキングセットとして機能します。
Apache Spark内では、ワークフローは有向非巡回グラフ(DAG)として管理されます。ノードはRDDを表し、エッジはRDDの操作を表します。
Sparkは、ループ内でデータセットに複数回アクセスする反復アルゴリズムと、インタラクティブ/探索的データ分析、つまりデータベーススタイルのデータクエリの繰り返しの両方の実装を容易にします。このようなアプリケーションのレイテンシーは、Apache HadoopMapReduceの実装と比較して数桁削減される可能性が 反復アルゴリズムのクラスの中には、ApacheSparkを開発するための最初の推進力を形成した機械学習システムのトレーニングアルゴリズムが
Apache Sparkには、クラスターマネージャーと分散ストレージシステムが必要です。クラスター管理の場合、Sparkはスタンドアロン(ネイティブSparkクラスター。クラスターを手動で起動するか、インストールパッケージで提供される起動スクリプトを使用できます。これらのデーモンを単一のマシンで実行してテストすることもできます)、Hadoop YARN、ApacheMesosまたはKubernetes。分散ストレージの場合、Sparkは、Alluxio、Hadoop分散ファイルシステム(HDFS)、 MapRファイルシステム(MapR-FS)、 Cassandra、 OpenStack Swift、Amazonなどのさまざまなインターフェースとインターフェースできます。S3、Kudu、Lustreファイルシステム、またはカスタムソリューションを実装できます。Sparkは、疑似分散ローカルモードもサポートします。これは通常、開発またはテストの目的でのみ使用され、分散ストレージは不要で、代わりにローカルファイルシステムを使用できます。このようなシナリオでは、SparkはCPUコアごとに1つのエグゼキュータを備えた単一のマシンで実行されます。

Spark Core
Spark Coreは、プロジェクト全体の基盤です。これは、分散タスクのディスパッチ、スケジューリング、および基本的なI / O機能を提供し、RDD抽象化を中心としたアプリケーションプログラミングインターフェイス(Java、Python、Scala、.NET およびRの場合)を通じて公開されます(Java APIは他のユーザーにも利用できます)。 JVM言語ですが、JVMに接続できる他のJVM以外の言語(Julia など)でも使用できます。このインターフェイスは、プログラミングの機能的/高次モデルを反映しています。「ドライバー」プログラムは、関数をSparkに渡すことにより、RDDでマップ、フィルター、リデュースなどの並列操作を呼び出し、クラスター上で関数の実行を並列にスケジュールします。これらの操作、および結合などの追加の操作は、RDDを入力として受け取り、新しいRDDを生成します。RDDは不変であり、その操作は怠惰です。フォールトトレランスは、各RDDの「系統」(それを生成した一連の操作)を追跡して、データが失われた場合に再構築できるようにすることで実現されます。RDDには、任意のタイプのPython、.NET、Java、またはScalaオブジェクトを含めることができます。
Sparkは、RDD指向の機能的なプログラミングスタイルに加えて、2つの制限された形式の共有変数を提供します。ブロードキャスト変数はすべてのノードで使用可能である必要がある読み取り専用データを参照し、アキュムレータは命令型の削減をプログラムするために使用できます。
RDD中心の関数型プログラミングの典型的な例は、テキストファイルのセットに含まれるすべての単語の頻度を計算し、最も一般的な単語を出力する次のScalaプログラムです。各マップ、
flatMap(のバリアント
マップ)と
reduceByKeyがかかる匿名関数を実行する単一のデータ項目(またはアイテムのペア)に簡単な操作、および新しいRDDにRDDを変換する引数を適用すること。
val conf = new SparkConf ()。setAppName (”wiki_testは” ) //スパークconfigオブジェクト作成ヴァル SC = 新しい SparkContext (CONF ) //スパークコンテキスト作成ヴァル・ データ = 皮下。textFile (”/ path / to / somedir” ) // “somedir”から(ファイル名、コンテンツ)ペアのRDDにファイルを読み取ります。val トークン = データ。flatMap (_ 。スプリット(”” )) //スプリット各ファイルのトークン(ワード)のリストに。val wordFreq = tokens 。マップ((_ 、 1 ))。reduceByKey (_ + _ ) //各トークンに1のカウントを追加してから、単語タイプごとのカウントを合計します。wordFreq 。SORTBY (S => – S 。_2 )。地図(X => (X 。_2 、 X 。_1 ))。top (10 ) //上位10語を取得します。単語とカウントを入れ替えて、カウントで並べ替えます。

Spark SQL
Spark SQLは、DataFramesと呼ばれるデータ抽象化を導入したSpark Core上のコンポーネントであり、構造化および半構造化データのサポートを提供します。Spark SQLは、Scala、Java、Python、または.NETでDataFrameを操作するためのドメイン固有言語(DSL)を提供します。コマンドラインインターフェイスとODBC / JDBCサーバーを使用して、SQL言語のサポートも提供します。DataFrameにはRDDによるコンパイル時の型チェックがありませんが、Spark 2.0以降、強く型付けされたDataSetはSparkSQLでも完全にサポートされています。
組織をインポートします。apache 。スパーク。sql 。SparkSessionval url = “jdbc:mysql:// yourIP:yourPort / test?user = yourUsername; password = yourPassword” //データベースサーバーのURL。val spark = SparkSession 。ビルダー()。getOrCreate () // Sparkセッションオブジェクトを作成しますval df = spark 。読んでください 。format (”jdbc” ) 。オプション(”url” 、 url ) 。オプション(”dbtable” 、 “people” ) 。負荷()df 。printSchema () //このDataFrameのスキーマを検索します。val countsByAge = df 。groupBy (”年齢” )。count () //年齢で人を数える//またはSQL経由://df.createOrReplaceTempView( “people”)// val countsByAge = spark.sql( “SELECT age、count(*)FROM people GROUP BY age”)

SparkStreaming
Spark Streamingは、SparkCoreの高速スケジューリング機能を使用してストリーミング分析を実行します。ミニバッチにデータを取り込み、それらのミニバッチのデータに対してRDD変換を実行します。この設計により、バッチ分析用に記述された同じアプリケーションコードのセットをストリーミング分析で使用できるため、ラムダアーキテクチャの実装が容易になります。 ただし、この便利さには、ミニバッチ期間に等しいレイテンシーのペナルティが伴います。ミニバッチではなくイベントごとに処理する他のストリーミングデータエンジンには、StormとFlinkのストリーミングコンポーネントが含まれます。 Spark Streamingには、Kafka、Flume、Twitter、ZeroMQ、Kinesis、およびTCP / IPソケットから消費するためのサポートが組み込まれています。
Spark 2.xでは、データセットに基づく構造化ストリーミングと呼ばれる、より高レベルのインターフェイスを備えた別のテクノロジーも提供され、ストリーミングをサポートします。
Sparkは、従来のオンプレミス データセンターとクラウドにデプロイできます。

MLlib機械学習ライブラリ
Spark MLlibは、Spark Core上にある分散型機械学習フレームワークであり、主に分散メモリベースのSparkアーキテクチャにより、Apache Mahoutで使用されるディスクベースの実装の9倍の速度です(ベンチマークに対してMLlib開発者によって行わ交互最小二乗)(ALS)の実装、およびMahoutのそれ自体がスパークインタフェースを獲得する前に、およびスケールより良好Vowpal Wabbit。多くの一般的な機械学習および統計アルゴリズムが実装されており、MLlibに同梱されています。これにより、次のような大規模な機械学習パイプラインが簡素化されます。
要約統計、相関、層化サンプリング、仮説検定、ランダムデータ生成
分類と回帰:サポートベクターマシン、ロジスティック回帰、線形回帰、単純ベイズ分類、決定木、ランダムフォレスト、勾配ブーストツリー
交互最小二乗(ALS)を含む協調フィルタリング技術
k-means、潜在的ディリクレ割り当て(LDA)を含むクラスター分析法
特異値分解(SVD)や主成分分析(PCA)などの次元削減手法
特徴抽出および変換関数
確率的勾配降下法、制限付きメモリBFGS(L-BFGS)などの最適化アルゴリズム

GraphX
GraphXは、ApacheSpark上にある分散グラフ処理フレームワークです。不変のRDDに基づいているため、グラフは不変であり、したがってGraphXは、グラフデータベースのようなトランザクション方式はもちろん、更新が必要なグラフには適し GraphXは、(例えば、超並列アルゴリズムの実装のための2つの別個のAPIを提供するのPageRank:)プレゲル抽象化、より一般的なMapReduceのスタイルのAPI。 Spark 1.6で正式に非推奨になった前身のBagelとは異なり、GraphXはプロパティグラフ(プロパティをエッジや頂点にアタッチできるグラフ)を完全にサポートしています。
GraphXはスパークメモリ内のバージョンであるとみなすことができるアパッチGiraph HadoopのディスクベースのMapReduceを利用します。
Apache Sparkと同様に、GraphXは当初カリフォルニア大学バークレー校のAMPLabとDatabricksで研究プロジェクトとして開始され、後にApache SoftwareFoundationとSparkプロジェクトに寄付されました。

言語サポート
Apache Sparkには、Scala、Java、R、およびPythonの組み込みサポートがあり、サードパーティは.NET CLR、 Julia、などをサポートしています。

歴史
Sparkは、2009年にカリフォルニア大学バークレー校のAMPLabでMatei Zahariaによって最初に開始され、2010年にBSDライセンスの下でオープンソース化されました。
2013年に、プロジェクトはApache Software Foundationに寄付され、ライセンスをApache2.0に切り替えました。2014年2月、SparkはトップレベルのApacheプロジェクトになりました。
2014年11月、Sparkの創設者であるM. Zahariaの会社であるDatabricksは、Sparkを使用した大規模な並べ替えで世界新記録を樹立しました。
Sparkは2015年に1000人を超える貢献者を持ち、Apache Software Foundation で最も活発なプロジェクトの1つであり、最も活発なオープンソースのビッグデータプロジェクトの1つです。
バージョン オリジナルのリリース日 最新バージョン 発売日
古いバージョン、メンテナンスされていません: 0.5 2012-06-12 0.5.1 2012-10-07
古いバージョン、メンテナンスされていません: 0.6 0.6 2012-10-14 0.6.2 2013-02-07
古いバージョン、メンテナンスされていません: 0.7 2013-02-27 0.7.3 2013-07-16
古いバージョン、メンテナンスされていません: 0.8 2013-09-25 0.8.1 2013-12-19
古いバージョン、メンテナンスされていません: 0.9 2014-02-02 0.9.2 2014-07-23
古いバージョン、メンテナンスされていません: 1.0 2014-05-26 1.0.2 2014-08-05
古いバージョン、メンテナンスされていません: 1.1 2014-09-11 1.1.1 2014-11-26
古いバージョン、メンテナンスされていません: 1.2 2014-12-18 1.2.2 2015-04-17
古いバージョン、メンテナンスされていません: 1.3 2015-03-13 1.3.1 2015-04-17
古いバージョン、メンテナンスされていません: 1.4 2015-06-11 1.4.1 2015-07-15
古いバージョン、メンテナンスされていません: 1.5 2015-09-09 1.5.2 2015-11-09
古いバージョン、メンテナンスされていません: 1.6 2016-01-04 1.6.3 2016-11-07
古いバージョン、メンテナンスされていません: 2.0 2016-07-26 2.0.2 2016-11-14
古いバージョン、メンテナンスされていません: 2.1 2016-12-28 2.1.3 2018-06-26
古いバージョン、メンテナンスされていません: 2.2 2017-07-11 2.2.3 2019-01-11
古いバージョン、メンテナンスされていません: 2.3 2018-02-28 2.3.4 2019-09-09
古いバージョンですが、まだ維持されています: 2.4 LTS 2018-11-02 2.4.8 2021-05-17
現在の安定バージョン: 3.0 2020-06-18 3.0.3 2021-06-01
現在の安定バージョン: 3.1 2021-03-02 3.1.2 2021-06-01
伝説:
古いバージョン
古いバージョン、まだ維持されています
最新バージョン
最新のプレビューバージョン
将来のリリース

開発者
ApacheSparkはコミュニティによって開発されています。プロジェクトは「プロジェクト管理委員会」(PMC)と呼ばれるグループによって管理されています。現在のPMCは、Aaron Davidson、Andy Konwinski、Andrew Or、Ankur Dave、Robert Joseph Evans、DB Tsai、Dongjoon Hyun、Felix Cheung、Hyukjin Kwon、Haoyuan Li、Ram Sriharsha、Holden Karau、HermanvanHövell、Imran Rashid、Jason Dai 、Joseph Kurata Bradley、Joseph E. Gonzalez、Josh Rosen、Jerry Shao、Kay Ousterhout、Cheng Lian、Xiao Li、Mark Hamstra、Michael Armbrust、Matei Zaharia、Xiangrui Meng、Nicholas Pentreath、Mosharaf Chowdhury、Mridul Muralidharan、Prashant Sharma Wendell、Reynold Xin、Ryan LeCompte、Shane Huang、Shivaram Venkataraman、Sean McNamara、Sean R. Owen、Stephen Haberman、Tathagata Das、Thomas Graves、Thomas Dudziak、Takuy​​a Ueshin、Marcelo Masiero Vanzin、Wenchen Fan、Charles Reiss、Andrew Xia Yin Huai、Yanbo Liang、Shixiong Zhu

も参照してください
並行および並列プログラミングAPI /フレームワークのリスト

ノート
^ Spark1.3より前にSchemaRDDと呼ばれていました

参考文献
^ 「Sparkリリース2.0.0」。RのMLlib:SparkRがMLlibAPIを提供するようになりました Python:PySparkがさらに多くのMLlibアルゴリズムを提供するようになりました」
^ ザハリア、マテイ; Chowdhury、Mosharaf; フランクリン、マイケルJ。; シェンカー、スコット; ストイカ、イオン。Spark:ワーキングセットを使用したクラスターコンピューティング(PDF)。クラウドコンピューティングのホットトピックに関するUSENIXワークショップ(HotCloud)。
^ 「Spark2.2.0クイックスタート」。apache.org。2017-07-11 。RDDよりもパフォーマンスが優れているデータセットを使用するように切り替えることを強くお勧めします
^ 「Spark2.2.0非推奨リスト」。apache.org。2017-07-11 。
^ ダムジ、ジュール(2016-07-14)。「3つのApacheSpark APIの物語:RDD、データフレーム、およびデータセット:それらをいつ使用するかとその理由」。databricks.com 。
^ チェンバース、ビル(2017-08-10)。「12」。Spark:決定的なガイド。オライリーメディア。DataFramesまたはDatasetsがRDDにコンパイルされる、実行する実質的にすべてのSparkコード
^ 「ApacheSparkとは何ですか?初心者向けのSparkチュートリアルガイド」。janbasktraining.com。2018-04-13 。
^ ザハリア、マテイ; Chowdhury、Mosharaf; ダス、如来; デイブ、アンクル; 馬、ジャスティン; マッコーリー、マーフィー; J.、マイケル; シェンカー、スコット; ストイカ、イオン(2010)。復元力のある分散データセット:インメモリクラスターコンピューティングのフォールトトレラントな抽象化(PDF)。USENIXの症状。ネットワークシステムの設計と実装。
^ シン、レイノルド; ローゼン、ジョシュ; マテイ・ザハリア; フランクリン、マイケル; シェンカー、スコット; イオン・ストイカ。Shark:SQLとRich Analytics at Scale(PDF)。SIGMOD 2013 arXivの:1211.6176。Bibcode:2012arXiv1211.6176X。
^ ハリス、デリック「SparkがHadoopをハイパードライブに揺さぶる可能性がある4つの理由」。ギガオム。
^ 「クラスターモードの概要-Spark2.4.0ドキュメント-クラスターマネージャーの種類」。apache.org。ApacheFoundation。2019-07-09 。
^ Hadoopを含む他のオープンソースソフトウェアプロジェクトに関連するSparkを示す図
^ MapRエコシステムサポートマトリックス
^ Doan、DuyHai(2014-09-10)。「Re:cassandra + spark / pyspark」。Cassandraユーザー(メーリングリスト)。
^ 王、燕洞; ゴールドストーン、ロビン; Yu、Weikuan; 王、テン。「HPCシステムでのメモリ常駐MapReduceの特性評価と最適化」。2014 IEEE 28th International Parallel and Distributed ProcessingSymposium。IEEE。pp。799–808。土井:10.1109 /IPDPS.2014.87。ISBN
 978-1-4799-3800-1。S2CID  11157612。
^ dotnet / spark、.NET Platform、2020-09-14 、取得済み2020-09-14
^ 「GitHub-DFDX / Spark.jl:ApacheSparkのJuliaバインディング」。2019-05-24。
^ 「Sparkリリース1.3.0 | ApacheSpark」。
^ 「Spark、Kafka、およびCassandraを使用したLambdaアーキテクチャの適用| Pluralsight」。www.pluralsight.com 。
^ シャピラ、グウェン「SparkStreamingを使用したLambdaアーキテクチャの構築」。cloudera.com。Cloudera。バッチアプリケーション用に作成したものと同じ集計をリアルタイムデータストリームで再利用します
^ チンタパル、サンケット; ダギット、デレク; エヴァンス、ボビー; ファリヴァー、レザ; グレイブス、トーマス; ホルダーボー、マーク; 劉、卓; ヌスバウム、カイル; パティル、キショールクマール; 鵬、ボヤンジェリー; Poulosky、Paul。「ベンチマークストリーミング計算エンジン:ストーム、フリンク、スパークストリーミング」。2016 IEEE International Parallel and Distributed Processing Symposium Workshops(IPDPSW)。IEEE。pp。1789–1792。土井:10.1109 /IPDPSW.2016.138。ISBN
 978-1-5090-3682-0。S2CID  2180634。
^ Kharbanda、Arush「データをSparkストリーミングに取り込む」。sigmoid.com。Sigmoid(カリフォルニア州サニーベールのIT製品会社)。
^ ザハリア、マテイ(2016-07-28)。「ApacheSparkの構造化ストリーミング:ストリーミング用の新しい高レベルAPI」。databricks.com 。
^ スパークス、エヴァン; タルウォーカー、アミート(2013-08-06)。「SparkMeetup:MLbase、Sparkを使用した分散型機械学習」。slideshare.net。Spark User Meetup、カリフォルニア州サンフランシスコ。取り出される10年2月2014。
^ 「MLlib | ApacheSpark」。spark.apache.org 。
^ マラク、マイケル「GraphXとGraphFramesでのグラフ同型の発見:グラフ処理とグラフデータベース」。slideshare.net。sparksummit.org 。
^ マラク、マイケルSparkGraphXの動作。マニング。NS。89. ISBN
 9781617292521。Pregelとその小さな兄弟aggregateMessages()は、GraphXでのグラフ処理の基礎です。…終了条件により多くの柔軟性を必要とするアルゴリズムは、aggregateMessages()を使用して実装する必要があります
^ マラク、マイケル「GraphXとGraphFramesでのグラフ同型の発見:グラフ処理とグラフデータベース」。slideshare.net。sparksummit.org 。
^ マラク、マイケルSparkGraphXの動作。マニング。NS。9. ISBN
 9781617292521。Giraphは遅いHadoopMap / Reduceに制限されています
^ ゴンザレス、ジョセフ; Xin、Reynold; デイブ、アンクル; クランクショー、ダニエル; フランクリン、マイケル; イオン・ストイカ。GraphX:分散データフローフレームワークでのグラフ処理(PDF)。OSDI2014。
^ ^ ^ クラーク、リンゼイ。「ApacheSparkはビッグデータの意思決定をスピードアップします」。ComputerWeekly.com 。
^ 「ApacheSoftwareFoundationがApache&#8482 Spark&#8482をトップレベルプロジェクトとして発表」。apache.org。Apache SoftwareFoundation。
^ Sparkは大規模な並べ替えで公式に新記録を樹立しました
^ HUBSpark開発アクティビティを開く
^ 「ApacheSoftwareFoundationがApache&#8482 Spark&#8482をトップレベルプロジェクトとして発表」。apache.org。Apache SoftwareFoundation。
^ 「スパークニュース」。apache.org。
^ 「スパークニュース」。apache.org。
^ 「スパークニュース」。apache.org。
^ https://projects.apache.org/committee.html?spark

外部リンク
公式サイト
image"