Loading AI tools
来自维基百科,自由的百科全书
Apache Spark是一個開源叢集運算框架,最初是由加州大學柏克萊分校AMPLab所開發。相對於Hadoop的MapReduce會在執行完工作後將中介資料存放到磁碟中,Spark使用了記憶體內運算技術,能在資料尚未寫入硬碟時即在記憶體內分析運算。Spark在記憶體內執行程式的運算速度能做到比Hadoop MapReduce的運算速度快上100倍,即便是執行程式於硬碟時,Spark也能快上10倍速度。[2]Spark允許用戶將資料載入至叢集記憶體,並多次對其進行查詢,非常適合用於機器學習演算法。[3]
開發者 | Apache軟件基金會, 加州大學柏克萊分校AMPLab, Databricks |
---|---|
目前版本 |
|
原始碼庫 | |
程式語言 | Scala, Java, Python |
作業系統 | Linux, Mac OS, Microsoft Windows |
類型 | 數據分析, 機器學習演算法 |
特許條款 | Apache特許條款 2.0 |
網站 | spark |
使用Spark需要搭配叢集管理員和分散式儲存系統。Spark支援獨立模式(本地Spark叢集)、Hadoop YARN或Apache Mesos的叢集管理。[4] 在分散式儲存方面,Spark可以和 Alluxio、HDFS[5]、 Cassandra[6] 、OpenStack Swift和Amazon S3等介面搭配。 Spark也支援偽分散式(pseudo-distributed)本地模式,不過通常只用於開發或測試時以本機檔案系統取代分散式儲存系統。在這樣的情況下,Spark僅在一台機器上使用每個CPU核心執行程式。
在2014年有超過465位貢獻者投入Spark開發[7],讓其成為Apache軟件基金會以及大數據眾多開源專案中最為活躍的專案。
Spark在2009年由Matei Zaharia在加州大學柏克萊分校AMPLab開創,2010年透過BSD特許條款開源釋出。2013年,該專案被捐贈給Apache軟件基金會並切換特許條款至Apache2.0。[8]。2014年2月,Spark成為Apache的頂級專案。2014年11月,Databricks團隊使用Spark 重新整理資料排序世界記錄。[9]
Spark專案包含下列幾項:
Spark核心是整個專案的基礎,提供了分散式任務調度,排程和基本的I/O功能。而其基礎的程式抽象則稱為彈性分散式資料集(RDDs),是一個可以並列操作、有容錯機制的資料集合。 RDDs可以透過參照外部儲存系統的資料集建立(例如:共用檔案系統、HDFS、HBase或其他 Hadoop 資料格式的資料來源)。或者是通過在現有RDDs的轉換而創建(比如:map、filter、reduce、join等等)。
RDD抽象化是經由一個以Scala、Java、Python的語言整合API所呈現,簡化了編程複雜性,應用程式操縱RDDs的方法類似於操縱本地端的資料集合。
以 RDD 為中心的函數式編程的一個典型範例是以下 Scala 程式,它計算一組文字檔案中出現的所有單詞的頻率並列印最常見的單詞。 每個 map、flatMap(map 的變體)和 reduceByKey 都採用匿名函數對單個數據項(或一對項)執行簡單操作,並應用其參數將 RDD 轉換為新的 RDD。[10][11]
val conf = new SparkConf().setAppName("wiki_test")
val sc = new SparkContext(conf)
val data = sc.textFile("/path/to/somedir")
val tokens = data.flatMap(_.split(" "))
val wordFreq = tokens.map((_, 1)).reduceByKey(_ + _)
wordFreq.sortBy(s => -s._2).map(x => (x._2, x._1)).top(10)
Spark SQL在Spark核心上帶出一種名為SchemaRDD的資料抽象化概念,提供結構化和半結構化資料相關的支援。Spark SQL提供了領域特定語言,可使用Scala、Java或Python來操縱SchemaRDDs。它還支援使用使用命令列介面和ODBC/JDBC伺服器操作SQL語言。在Spark 1.3版本,SchemaRDD被重新命名為DataFrame。
Spark Streaming充分利用Spark核心的快速排程能力來執行串流分析。它擷取小批次的資料並對之執行RDD轉換。這種設計使串流分析可在同一個引擎內使用同一組為批次分析編寫而撰寫的應用程式代碼。
MLlib是Spark上分散式機器學習框架。Spark分散式記憶體式的架構比Hadoop磁碟式的Apache Mahout快上10倍,擴充性甚至比Vowpal Wabbit要好。[12] MLlib可使用許多常見的機器學習和統計演算法,簡化大規模機器學習時間,其中包括:
GraphX是Spark上的分散式圖形處理框架。它提供了一組API,可用於表達圖表計算並可以模擬Pregel抽象化。GraphX還對這種抽象化提供了優化運行。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.