spark是一個用於大規模數據處理的統一計算引擎。適用於各類各樣原先須要多種不一樣的分佈式平臺處理的場景,包括批處理、迭代計算、交互式查詢、流處理。經過統一的框架將各類處理流程整合到一塊兒。java
spark特性python
spark經過使用先進的DAG調度器、查詢優化器和物理執行引擎,能夠高性能地進行批量及流式處理。使用邏輯迴歸算法進行迭代計算,spark比hadoop速度快100多倍。算法
spark支持多種編程語言,好比Java、Scala、Python、R及SQL。 shell
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),意味着已能夠放心在線上使用。
該版本的更新內容主要針對的是系統的可用性、穩定性以及代碼潤色。包括:
2018-02-23,Spark 2.3.0發佈
這是 2.x 系列中的第四個版本。此版本增長了對 Structured Streaming 中的 Continuous Processing 以及全新的 Kubernetes Scheduler 後端的支持
其餘主要更新包括新的 DataSource 和 Structured Streaming v2 API,以及一些 PySpark 性能加強。
此外,此版本繼續改進項目的可用性、穩定性,並持續潤色代碼。
忠於技術,熱愛分享。歡迎關注公衆號:java大數據編程,瞭解更多技術內容。