標籤:
來自:維基百科,自由的百科全書
Apache Spark是一個開源簇運算架構,最初是由加州大學柏克萊分校AMPLab所開發。相對於Hadoop的MapReduce會在運行完工作後將中介資料存放到磁碟中,Spark使用了記憶體內運算技術,能在資料尚未寫入硬碟時即在記憶體內分析運算。Spark在記憶體內運行程式的運算速度能做到比Hadoop MapReduce的運算速度快上100倍,即便是運行程式於硬碟時,Spark也能快上10倍速度。[1]Spark允許使用者將資料載入至簇記憶體,並多次對其進行查詢,非常適合用於機器學習演算法。[2]
使用Spark需要搭配簇管理員和分布式儲存系統。Spark支援獨立模式(本地Spark簇)、Hadoop YARN或Apache Mesos的簇管理。[3] 在分布式儲存方面,Spark可以和HDFS[4]、 Cassandra[5] 、OpenStack Swift和Amazon S3等介面搭載。 Spark也支援偽分布式(pseudo-distributed)本地模式,不過通常只用於開發或測試時以本機檔案系統替換分布式儲存系統。在這樣的情況下,Spark僅在一台機器上使用每個CPU核心運行程式。
在2014年有超過465位貢獻家投入Spark開發[6],讓其成為Apache軟體基金會以及巨量資料眾多開源項目中最為活躍的項目。
目錄 [隱藏]
- 1曆史
- 2項目構成要素
- 2.1Spark核心和彈性分布式資料集(RDDs)
- 2.2Spark SQL
- 2.3Spark Streaming
- 2.4MLlib
- 2.5GraphX
- 3特色
- 4參考資料
- 5外部連結
曆史[編輯]
Spark在2009年由Matei Zaharia在加州大學柏克萊分校AMPLab開創,2010年通過BSD許可協議開源發布。2013年,該項目被捐贈給Apache軟體基金會並切換許可協議至Apache2.0。[7]。2014年2月,Spark成為Apache的頂級項目。2014年11月,Databricks團隊使用Spark 重新整理資料排序世界記錄。[8]
項目構成要素[編輯]
Spark項目包含下列幾項:
Spark核心和彈性分布式資料集(RDDs)[編輯]
Spark核心是整個項目的基礎,提供了分布式任務調度,調度和基本的I/O功能。而其基礎的程式抽象則稱為彈性分布式資料集(RDDs),是一個可以並型操作、有容錯機制的資料集合。 RDDs可以通過引用外部儲存系統的資料集建立(例如:共用檔案系統、HDFS、HBase或其他 Hadoop 資料格式的資料來源)。或者是通過在現有RDDs的轉換而建立(比如:map、filter、reduce、join等等)。
RDD抽象化是經由一個以Scala, Java, Python的語言整合API所呈現,簡化了編程複雜性,應用程式操縱RDDs的方法類似於操縱本地端的資料集合。
Spark SQL[編輯]
Spark SQL在Spark核心上帶出一種名為SchemaRDD的資料抽象化概念,提供結構化和半結構化資料相關的支援。Spark SQL提供了領特定領域語言,可使用Scala、Java或Python來操縱SchemaRDDs。它還支援使用使用命令列介面和ODBC/JDBC伺服器操作SQL語言。在Spark 1.3版本,SchemaRDD被重新命名為DataFrame。
Spark Streaming[編輯]
Spark Streaming充分利用Spark核心的快速調度能力來運行串流分析。它截取小批量的資料並對之運行RDD轉換。這種設計使串流分析可在同一個引擎內使用同一組為批量分析編寫而撰寫的應用程式代碼。
MLlib[編輯]
MLlib是Spark上分布式機器學習架構。Spark分布式記憶體式的架構比Hadoop磁碟式的Apache Mahout快上10倍,擴充性甚至比Vowpal Wabbit要好。[9] MLlib可使用許多常見的機器學習和統計演算法,簡化大規模機器學習時間,其中包括:
- 匯總統計、相關性、分層抽樣、假設檢定、隨機資料產生
- 分類與迴歸:支援向量機、迴歸、線性迴歸、決策樹、樸素貝葉斯
- 協同過濾:ALS
- 分群:k-平均演算法
- 維度縮減:奇異值分解(SVD),主成分分析(PCA)
- 特徵提取和轉換:TF-IDF、Word2Vec、StandardScaler
- 最佳化:隨機梯度下降法(SGD)、L-BFGS
GraphX[編輯]
GraphX是Spark上的分布式圖形處理架構。它提供了一組API,可用於表達圖表計算並可以類比Pregel抽象化。GraphX還對這種抽象化提供了最佳化運行。
GraphX最初為加州大學柏克萊分校AMPLab和Databricks的研究項目,後來捐贈給Spark項目。[10]
特色[編輯]
- Java、Scala、Python和R APIs。
- 可擴充至超過8000個結點。[11]
- 能夠在記憶體內快取資料集以進行互動式資料分析。
- Scala或Python中的互動式命令列介面可降低橫向擴充資料探索的反應時間。
- Spark Streaming對即時資料流的處理具有可擴充性、高輸送量、可容錯性等特點。
- Spark SQL支援結構化和和關係式查詢處理(SQL)。
- MLlib機器學習演算法和Graphx圖形處理演算法的進階庫。
參考資料[編輯]
- ^ Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion. Shark: SQL and Rich Analytics at Scale(PDF). June 2013.
- ^ Matei Zaharia. Spark: In-Memory Cluster Computing for Iterative and Interactive Applications. Invited Talk at NIPS 2011 Big Learning Workshop: Algorithms, Systems, and Tools for Learning at Scale.
- ^ Cluster Mode Overview - Spark 1.2.0 Documentation - Cluster Manager Types. apache.org. Apache Foundation. 2014-12-18 [2015-01-18].
- ^ Figure showing Spark in relation to other open-source Software projects including Hadoop
- ^ Doan, DuyHai. Re: cassandra + spark / pyspark. Cassandra User mailing list. 2014-09-10 [2014-11-21].
- ^ Open HUB Spark development activity
- ^ The Apache Software Foundation Announces Apache™ Spark™ as a Top-Level Project. apache.org. Apache Software Foundation. 27 February 2014 [4 March 2014].
- ^ Spark officially sets a new record in large-scale sorting
- ^ Sparks, Evan; Talwalkar, Ameet. Spark Meetup: MLbase, Distributed Machine Learning with Spark. slideshare.net. Spark User Meetup, San Francisco, California. 2013-08-06 [10 February 2014].
- ^ Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion. GraphX: Graph Processing in a Distributed Dataflow Framework (PDF). Oct 2014.
- ^ Apache Spark FAQ. apache.org. Apache Software Foundation.[5 December 2014].
外部連結[編輯]
- 官方網站
- Spark SQL
- Spark Streaming
- MLlib機器學習
- GraphX 圖形處理
Apache Spark(轉)