「Apache Spark」の版間の差分

削除された内容 追加された内容
m バージョン情報の更新
accessdate が無いエラーに、本日の日付を記述。ref の位置を微調整。
21行目:
Apache Sparkはオープンソースのクラスタコンピューティングフレームワークである。カリフォルニア大学バークレー校のAMPLabで開発されたコードが、管理元のApacheソフトウェア財団に寄贈された。暗黙のデータ並列性と耐故障性を備えたクラスタ全体をプログラミングするためのインタフェースがある。
 
[[日経BP]]社が発表した「ITインフラテクノロジーAWARD 2015」において、Sparkは[[Docker]]に次ぐ準グランプリとされた<ref>[http://corporate.nikkeibp.co.jp/information/newsrelease/newsrelease20141224.shtml 日経BP社、「ITインフラテクノロジーAWARD 2015」を発表。グランプリに「Docker」、準グランプリに「Apache Spark」]</ref>
 
<ref>[http://corporate.nikkeibp.co.jp/information/newsrelease/newsrelease20141224.shtml 日経BP社、「ITインフラテクノロジーAWARD 2015」を発表。グランプリに「Docker」、準グランプリに「Apache Spark」]</ref>
== 概要 ==
[[フォールトトレラントシステム]]で管理され、複数マシンのクラスタに分散されたデータ項目の読み取り専用[[多重集合]]であるRDD(resilient distributed dataset)と呼ばれる[[データ構造]]を中心とするアプリケーションプログラミングインターフェイスを備えている。MapReduceは、分散プログラム上で特定の線形[[データフロー]]構造を強制するクラスタコンピューティング[[プログラミングパラダイム]]の制限に対応して開発された。MapReduceは、ディスクから入力データを読み込み、データ全体に関数をマップし、削減結果をディスクに格納する。SparkのRDDは、 分散[[共有メモリ]]の (意図的に)制限された形式で提供する分散プログラムの[[ワーキングセット]]として機能する<ref>{{cite conference |first1=Matei |last1=Zaharia |first2=Mosharaf |last2=Chowdhury |first3=Tathagata |last3=Das |first4=Ankur |last4=Dave |first5=Justin |last5=Ma, |first6=Murphy |last6=McCauley |first7=Michael |last7=J. |first8=Scott |last8=Shenker |first9=Ion |last9=Stoica |title=Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing |url=https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf |conference=USENIX Symp. Networked Systems Design and Implementation}}</ref>
 
RDDの可用性は、ループ内で複数回データセットを参照する[[反復法 (数値計算)|反復法]]アルゴリズム、および対話型/探索型データ分析、データ反復のデータベースクエリの両方の実装を容易にする。このようなアプリケーションの[[レイテンシ]](Apache Hadoopスタックでは一般的であったMapReduce実装と比較して)は、桁違いに低下する可能性がある。反復アルゴリズムのクラスの中には、 機械学習のための訓練アルゴリズムがあり、Apache Sparkを開発の初期の刺激となった<ref>{{cite web |title=4 reasons why Spark could jolt Hadoop into hyperdrive |first=Derrick |last=Harris |date=28 June 2014 |url=https://gigaom.com/2014/06/28/4-reasons-why-spark-could-jolt-hadoop-into-hyperdrive/ |websiteaccessdate=[[Gigaom]]2017-10-17}}</ref>
 
クラスタマネージャと分散ストレージシステムが必要であり、クラスタ管理のためにスタンドアロン(ネイティブのSparkクラスタ)、Hadoop YARN、Apache Mesosに対応している。分散ストレージの場合、Hadoop分散ファイルシステム<ref>[https://amplab.cs.berkeley.edu/software/ Figure showing Spark in relation to other open-source Software projects including Hadoop]</ref>、[[マップアール]]ファイルシステム<ref>[http://doc.mapr.com/display/MapR/Ecosystem+Support+Matrix MapR ecosystem support matrix]</ref>、[[Apache Cassandra]]<ref>{{cite mailing list |url=http://mail-archives.apache.org/mod_mbox/cassandra-user/201409.mbox/%3CCABNXB2DE5Apmvn1nNg79+VdPCSZiCsGdt=ZB4s4OF_5JzS60iA@mail.gmail.com%3E |title=Re: cassandra + spark / pyspark |date=2014-09-10 |accessdate=2014-11-21 |mailinglist=Cassandra User |last=Doan |first=DuyHai }}</ref> [[OpenStack]] Swift、[[Amazon S3]]、Kudu、カスタムソリューションを実装できる。擬似分散ローカルモードも対応しており通常は開発やテスト目的でのみ使用される。分散ストレージは不要でローカルファイルシステムを代わりに使用でき、CPU[[マルチコア]]ごとに1台のマシン上で実行される。
 
=== Spark Core ===
プロジェクト全体の基盤であり、RDD[[抽象化 (計算機科学)|抽象化]]を中心とするアプリケーションプログラミングインターフェイス(Java、Python、Scala、R)を介して公開される分散タスクディスパッチ、スケジューリング、および基本I / O機能を実装している。(Java APIは他のJVM言語でも使用でき、[[Julia]]<ref>https://github.com/dfdx/Spark.jl</ref>などの他の非JVM言語でも使用できる。)「ドライバ」プログラムは、関数をSparkに渡すことによってRDD上でmap、 filter 、reduceなどの並列操作を呼び出し、関数の実行をクラスタ上で並列にスケジュールする。 [2]これらの操作や結合などの追加操作は、RDDを入力として受け取り、新しいRDDを生成する。RDDは[[イミュータブル]]で[[遅延評価]]している。耐故障性は、データ消失の場合に再構成できるように各RDDの「系統」(生成操作)を追跡により達成される。RDDには任意の種類のPython、Java、Scalaオブジェクトを含められる。
 
RDD指向の機能的プログラミングスタイルの他に、共有変数の2つの制限形式がある。ブロードキャスト変数はすべてのノードで利用可能な読み取り専用データを参照し、アキュムレータは[[命令型プログラミング]]の削減をプログラムできる。
44行目:
wordFreq.sortBy(s => -s._2).map(x => (x._2, x._1)).top(10) // Get the top 10 words. Swap word and count to sort by count.
</source>
 
=== Spark SQL ===
Spark Coreより上位のコンポーネントで、構造化データや半構造化データをサポートするDataFramesというデータ抽象化を導入した。Scala、Java、PythonのDataFramesを操作するための[[ドメイン固有言語]](DSL)を提供しており、[[キャラクタユーザインタフェース]]と[[Open Database Connectivity]]/[[JDBC]]サーバーとのSQL言語サポートも実装している。DataFramesには、Spark 2.0のようにRDDによって提供されるコンパイル時型チェック機能はないが、強く型付けされたデータセットはSpark SQLでも完全にサポートされている。
62 ⟶ 63行目:
val countsByAge = df.groupBy("age").count() // Counts people by age
</source>
 
=== Spark Streaming ===
Spark Coreの高速スケジューリング機能を活用してストリーミング分析を実行する。ミニバッチでデータを取り込み、RDD変換を実行する。この設計により、バッチ分析用に記述されたアプリケーションコードセットを使用できるため、 ラムダアーキテクチャの実装が容易になる。 しかし、この利便性はミニバッチ持続時間に等しいレイテンシのペナルティを伴う。ミニバッチではなくイベント別にイベントを処理するその他のストリーミングデータエンジンには、StormとFlinkのストリーミングコンポーネントが含まれる。[13]Spark Streamingは、Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCP/IPソケットに対応している<ref>{{cite web |url=https://www.sigmoid.com/getting-data-into-spark-streaming/ |title=Getting Data into Spark Streaming |last1=Kharbanda |first1=Arush |date=17 March 2015 |website=sigmoid.com |publisher=Sigmoid (Sunnyvale, California IT product company) |access-date=7 July 2016}}</ref>
 
=== MLlib Machine Learning Library ===
分散メモリベースのSparkアーキテクチャの大部分がApache Mahoutで使用されているディスクベースの実装の9倍速である、Spark Core上の分散マシン学習フレームワークである。多くの一般的な機械学習と統計アルゴリズムが実装され、大規模機械学習パイプラインを簡略化するMLlibに同梱されている。
 
=== GraphX ===
Apache Spark上の分散グラフ処理フレームワークを示す。不変のRDDに基づきグラフは不変であるため、グラフデータベースのようなトランザクション方式ではなく更新が必要な[[グラフ (データ構造)|グラフ]]には適していない。大規模並列アルゴリズム([[ページランク]]など)を実装するための2つの別個のAPI、Pregel抽象化、より一般的なMapReduceスタイルAPIを提供している<ref>{{cite book |last=Malak |first=Michael |date=1 July 2016 |title=Spark GraphX in Action |url=https://books.google.com/books?id=8XcPjwEACAAJ |publisher=Manning |page=89 |isbn=9781617292521 |quote=Pregel and its little sibling aggregateMessages() are the cornerstones of graph processing in GraphX. ... algorithms that require more flexibility for the terminating condition have to be implemented using aggregateMessages()}}</ref> Spark1.6で旧式に廃止された旧型のBagelとは異なり、GraphXはプロパティグラフ(プロパティがエッジや頂点に付加できるグラフ)を完全にサポートしている<ref>{{cite web |url=http://www.slideshare.net/SparkSummit/finding-graph-isomorphisms-in-graphx-and-graphframes/15 |title=Finding Graph Isomorphisms In GraphX And GraphFrames: Graph Processing vs. Graph Database |last1=Malak |first1=Michael |date=14 June 2016 |website=slideshare.net |publisher=sparksummit.org |access-date=11 July 2016}}</ref>
 
HadoopディスクベースのMapReduceを利用したApache GiraphのSparkインメモリ版として見ることができる<ref>{{cite book |last=Malak |first=Michael |date=1 July 2016 |title=Spark GraphX in Action |url=https://books.google.com/books?id=8XcPjwEACAAJ |publisher=Manning |page=9 |isbn=9781617292521 |quote=Giraph is limited to slow Hadoop Map/Reduce}}</ref>
 
Apache Sparkと同様にUC BerkeleyのAMPLabとDatabricksで研究プロジェクトとして開始され、後にApacheソフトウェア財団とSparkプロジェクトに寄贈された<ref>{{cite journal|first1=Joseph| last1=Gonzalez| first2=Reynold |last2=Xin| first3=Ankur| last3=Dave| first4=Daniel| last4=Crankshaw| first5=Michael| last5=Franklin| first6=Ion| last6=Stoica|title=GraphX: Graph Processing in a Distributed Dataflow Framework| conference=OSDI 2014|date=Oct 2014| url=https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-gonzalez.pdf}}</ref>
 
Apache Sparkと同様にUC BerkeleyのAMPLabとDatabricksで研究プロジェクトとして開始され、後にApacheソフトウェア財団とSparkプロジェクトに寄贈された。<ref>{{cite journal|first1=Joseph| last1=Gonzalez| first2=Reynold |last2=Xin| first3=Ankur| last3=Dave| first4=Daniel| last4=Crankshaw| first5=Michael| last5=Franklin| first6=Ion| last6=Stoica|title=GraphX: Graph Processing in a Distributed Dataflow Framework| conference=OSDI 2014|date=Oct 2014| url=https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-gonzalez.pdf}}</ref>
== 脚注 ==
<references/>
 
== 外部リンク ==
*[https://spark.apache.org 公式WEBサイト]
* {{Official website|https://spark.apache.org}}
 
{{apache}}
[[Category:クラウドコンピューティング]]