spark是一個用于大規模資料處理的統一計算引擎。适用于各種各樣原先需要多種不同的分布式平台處理的場景,包括批處理、疊代計算、互動式查詢、流處理。通過統一的架構将各種處理流程整合到一起。
spark特性
- 快速性
spark通過使用先進的DAG排程器、查詢優化器和實體執行引擎,可以高性能地進行批量及流式處理。使用邏輯回歸算法進行疊代計算,spark比hadoop速度快100多倍。
- 簡單易用
spark支援多種程式設計語言,比如Java、Scala、Python、R及SQL。
spark提供了超過80多個進階算子操作,可以很便捷地建構并行計算應用。
- 通用性
spark建構了一個完善的生态棧,将批量計算、互動式計算、流式計算、機器學習及圖計算整合到一個統一的架構體系中。
- 處處運作
spark可以運作在standalone、YARN、Mesos、Kubernetes及EC2多種排程平台上。
另外,spark可以接入多種資料源,比如HDFS、Alluxio、HBase、Cassandra、Hive及本地檔案。
spark生态棧
Spark Core
Spark Core實作了Spark的基本功能,包括任務排程、記憶體管理、錯誤恢複、與存儲系統互動等子產品。Spark Core還包含了對彈性分布式資料集(resilient distributed dataset,簡稱RDD)的API定義。RDD表示分布在多個計算節點上并行操作的元素集合,是Spark的核心抽象模型。
Spark SQL
Spark SQL是Spark用來處理結構化資料的子架構。Spark SQL支援多種資料源,比如Hive表、Parquet及JSON等。Spark SQL可使用SQL或Hive的SQL方言(HQL)查詢資料,還支援将SQL和RDD互相轉換。
Spark Streaming
Spark Streaming是Spark提供的對實時資料進行流式計算的元件。Spark Streaming提供了操作資料流的API,同時還提供了進階别的容錯性、吞吐量及可伸縮性。
MLlib
MLlib是一個提供常見機器學習(ML)功能的程式庫。MLlib提供了很多種機器學習算法,包括分類、回歸、聚類、協同過濾等,還提供了模型評估、資料導入及更底層的機器學習原語(包括通用的梯度下降優化算法)。
Graphx
Graphx是用來操作圖(比如社交網絡的朋友關系圖)的程式庫,可進行并行的圖計算。Graphx擴充了RDD API,能用來建立一個頂點和邊都包含任意屬性的有向圖。Graphx支援對圖的各種操作(比如進行圖分隔的subgraph和操作所有頂點的mapVertices),及一些常用算法(比如PageRank和三角計數)。
叢集管理器
Spark設計為可高效地在一個計算節點到數千個計算節點之間伸縮計算,是以為了擷取最大靈活性,spark支援在各種叢集管理器上運作,包括Hadoop YARN、Apache Mesos及Spark自帶的獨立排程器等。
spark使用者及用途
spark的使用者主要分為兩大目标人群:資料分析師和工程師。這兩大人群使用spark的典型用例不一緻,大緻分為兩類:資料分析和資料處理。
資料分析
資料分析師就是主要負責分析資料并模組化的人。他們具備SQL、統計、預測模組化(機器學習)等方面技能,有一定使用Python、Matlab或R程式設計的能力。
Spark通過一系列元件支援資料分析任務。Spark shell提供python和scala接口來進行互動式資料分析。Spark SQL提供獨立的SQL shell來使用SQL探索資料,也可以通過标準的Spark程式或Spark shell進行SQL查詢。MLlib程式庫進行機器學習和資料分析。Spark還支援調用R或Matlab外部程式。
資料處理
工程師就是使用Spark開發資料處理應用的軟體開發者。他們具備軟體工程概念(封裝、接口設計及面向對象思想),能使用工程技術設計軟體系統。
Spark為開發用于叢集并行執行的程式提供了捷徑。不需要開發者關注分布式問題、網絡通信及程式容錯性。為工程師提供足夠的接口實作常見的任務及對應用監控、審查和性能調優。
spark簡史
- 2009 ,Spark誕生于UCBerkeley的AMP實驗室
- 2010 ,Spark正式對外開源
- 2012-10-15,Spark 0.6.0釋出。
- 大範圍的性能改進,增加了一些新特性,并對Standalone部署模式進行了簡化
- 2013-02-27,Spark 0.7.0釋出
- 增加了更多關鍵特性,例如:Python API、Spark Streaming的alpha版本等
- 2013-06-21,Spark接受進入Apache孵化器
- 2013-09-17,Spark 0.8.0釋出
- 支援Scala2.9/YARN2.2/Standalone部署模式下排程的高可用性,shuffle優化等
- 2014-01-24,Spark 0.9.0釋出
- 增加了GraphX,機器學習新特性,流式計算新特性,核心引擎優化(外部聚合、加強對YARN的支援)等
- 2014-05-26,Spark 1.0.0釋出
- 增加了Spark SQL、MLlib、GraphX和Spark Streaming都增加了新特性并進行了優化。Spark核心引擎還增加了對安全YARN叢集的支援
- 2014-09-03,Spark 1.1.0釋出
- Spark核心API及Streaming,Python,SQL,GraphX和MLlib的bug修複
- 2014-12-10,Spark 1.2.0釋出
- Spark核心API及Streaming,Python,SQL,GraphX和MLlib的bug修複
- 2015-03-06,Spark 1.3.0釋出
- 該版本釋出的最大亮點是新引入的DataFrame API,對于結構型的DataSet,它提供了更友善更強大的操作運算。。除了DataFrame之外,還值得關注的一點是Spark SQL成為了正式版本,這意味着它将更加的穩定,更加的全面。
- 2015-06-03,Spark 1.4.0釋出
- 該版本将 R API 引入 Spark,同時提升了 Spark 的核心引擎和 MLlib ,以及 Spark Streaming 的可用性
- 2015-09-09,Spark 1.5.0釋出
- Spark 1.5.0是1.x線上的第6個發行版。這個版本共處理了來自230+contributors和80+機構的1400+個patches。
- Spark 1.5的許多改變都是圍繞在提升Spark的性能、可用性以及操作穩定性。
- Spark 1.5.0焦點在Tungsten項目,它主要是通過對低層次的組建進行優化進而提升Spark的性能。
- Spark 1.5版本為Streaming增加了operational特性,比如支援backpressure。另外比較重要的更新就是新增加了一些機器學習算法和工具,并擴充了Spark R的相關API。
- 2015-12-22,Spark 1.6.0釋出
- 該版本含了超過1000個patches,在這裡主要展示三個方面的主題:新的Dataset API,性能提升(讀取Parquet 50%的性能提升,自動記憶體管理,streaming state management十倍的性能提升),以及大量新的機器學習和統計分析算法。
- 在Spark1.3.0引入DataFrame,它可以提供high-level functions讓Spark更好地處理資料結構和計算。這讓Catalyst optimizer 和Tungsten execution engine自動加速大資料分析。釋出DataFrame之後開發者收到了很多回報,其中一個主要的是大家反映缺乏編譯時類型安全。為了解決這個問題,Spark采用新的Dataset API (DataFrame API的類型擴充)。Dataset API擴充DataFrame API支援靜态類型和運作已經存在的Scala或Java語言的使用者自定義函數。對比傳統的RDD API,Dataset API提供更好的記憶體管理,特别是在長任務中有更好的性能提升。
- 2016-07-20,Spark 2.0.0釋出
- 該版本主要更新APIs,支援SQL 2003,支援R UDF ,增強其性能。300個開發者貢獻了2500更新檔程式
- 2016-12-16,Spark 2.1.0釋出
- 這是 2.x 版本線的第二個發行版。此發行版在為Structured Streaming進入生産環境做出了重大突破,Structured Streaming 現在支援了event time watermarks了并且支援Kafka0.10
- 此外,此版本更側重于可用性,穩定性和優雅(polish),并解決了1200多個tickets
- 2017-07-01,Spark 2.2.0釋出
- 這是 2.x 系列的第三個版本。此版本移除了 Structured Streaming 的實驗标記(experimental tag),意味着已可以放心線上上使用。
- 該版本的更新内容主要針對的是系統的可用性、穩定性以及代碼潤色。包括:
- Core 和 Spark SQL 的 API 更新和性能、穩定性改進,比如支援從 Hive metastore 2.0/2.1 中讀取資料;支援解析多行的 JSON 或 CSV 檔案;移除對 Java 7 的支援;移除對 Hadoop 2.5 及更早版本的支援 等
- SparkR 針對現有的 Spark SQL 功能添加了更廣泛的支援,比如 Structured Streaming 為 R 語言提供的 API ;R 語言支援完整的 Catalog API ;R 語言支援 DataFrame checkpointing 等
- 2018-02-23,Spark 2.3.0釋出
- 這是 2.x 系列中的第四個版本。此版本增加了對 Structured Streaming 中的 Continuous Processing 以及全新的 Kubernetes Scheduler 後端的支援
- 其他主要更新包括新的 DataSource 和 Structured Streaming v2 API,以及一些 PySpark 性能增強。
- 此外,此版本繼續改進項目的可用性、穩定性,并持續潤色代碼。
- now