spark是一個用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一計算引擎隔箍。適用于各種各樣原先需要多種不同的分布式平臺處理的場景寺酪,包括批處理坎背、迭代計算、交互式查詢寄雀、流處理得滤。通過統(tǒng)一的框架將各種處理流程整合到一起。
spark特性
- 快速性
spark通過使用先進(jìn)的DAG調(diào)度器盒犹、查詢優(yōu)化器和物理執(zhí)行引擎懂更,可以高性能地進(jìn)行批量及流式處理。使用邏輯回歸算法進(jìn)行迭代計算急膀,spark比hadoop速度快100多倍沮协。
- 簡單易用
spark支持多種編程語言,比如Java卓嫂、Scala慷暂、Python、R及SQL晨雳。
spark提供了超過80多個高級算子操作行瑞,可以很便捷地構(gòu)建并行計算應(yīng)用。
- 通用性
spark構(gòu)建了一個完善的生態(tài)棧悍募,將批量計算蘑辑、交互式計算、流式計算坠宴、機(jī)器學(xué)習(xí)及圖計算整合到一個統(tǒng)一的框架體系中洋魂。
- 處處運(yùn)行
spark可以運(yùn)行在standalone、YARN喜鼓、Mesos副砍、Kubernetes及EC2多種調(diào)度平臺上。
另外庄岖,spark可以接入多種數(shù)據(jù)源豁翎,比如HDFS、Alluxio隅忿、HBase心剥、Cassandra邦尊、Hive及本地文件。
spark生態(tài)棧
Spark Core
Spark Core實(shí)現(xiàn)了Spark的基本功能优烧,包括任務(wù)調(diào)度蝉揍、內(nèi)存管理、錯誤恢復(fù)畦娄、與存儲系統(tǒng)交互等模塊又沾。Spark Core還包含了對彈性分布式數(shù)據(jù)集(resilient distributed dataset,簡稱RDD)的API定義熙卡。RDD表示分布在多個計算節(jié)點(diǎn)上并行操作的元素集合杖刷,是Spark的核心抽象模型。
Spark SQL
Spark SQL是Spark用來處理結(jié)構(gòu)化數(shù)據(jù)的子框架驳癌。Spark SQL支持多種數(shù)據(jù)源滑燃,比如Hive表、Parquet及JSON等喂柒。Spark SQL可使用SQL或Hive的SQL方言(HQL)查詢數(shù)據(jù)不瓶,還支持將SQL和RDD相互轉(zhuǎn)換禾嫉。
Spark Streaming
Spark Streaming是Spark提供的對實(shí)時數(shù)據(jù)進(jìn)行流式計算的組件灾杰。Spark Streaming提供了操作數(shù)據(jù)流的API,同時還提供了高級別的容錯性熙参、吞吐量及可伸縮性艳吠。
MLlib
MLlib是一個提供常見機(jī)器學(xué)習(xí)(ML)功能的程序庫。MLlib提供了很多種機(jī)器學(xué)習(xí)算法孽椰,包括分類昭娩、回歸、聚類黍匾、協(xié)同過濾等栏渺,還提供了模型評估、數(shù)據(jù)導(dǎo)入及更底層的機(jī)器學(xué)習(xí)原語(包括通用的梯度下降優(yōu)化算法)锐涯。
Graphx
Graphx是用來操作圖(比如社交網(wǎng)絡(luò)的朋友關(guān)系圖)的程序庫磕诊,可進(jìn)行并行的圖計算。Graphx擴(kuò)展了RDD API纹腌,能用來創(chuàng)建一個頂點(diǎn)和邊都包含任意屬性的有向圖霎终。Graphx支持對圖的各種操作(比如進(jìn)行圖分隔的subgraph和操作所有頂點(diǎn)的mapVertices),及一些常用算法(比如PageRank和三角計數(shù))升薯。
集群管理器
Spark設(shè)計為可高效地在一個計算節(jié)點(diǎn)到數(shù)千個計算節(jié)點(diǎn)之間伸縮計算莱褒,所以為了獲取最大靈活性,spark支持在各種集群管理器上運(yùn)行涎劈,包括Hadoop YARN广凸、Apache Mesos及Spark自帶的獨(dú)立調(diào)度器等阅茶。
spark用戶及用途
spark的使用者主要分為兩大目標(biāo)人群:數(shù)據(jù)分析師和工程師。這兩大人群使用spark的典型用例不一致谅海,大致分為兩類:數(shù)據(jù)分析和數(shù)據(jù)處理目派。
數(shù)據(jù)分析
數(shù)據(jù)分析師就是主要負(fù)責(zé)分析數(shù)據(jù)并建模的人。他們具備SQL胁赢、統(tǒng)計企蹭、預(yù)測建模(機(jī)器學(xué)習(xí))等方面技能,有一定使用Python智末、Matlab或R編程的能力谅摄。
Spark通過一系列組件支持?jǐn)?shù)據(jù)分析任務(wù)。Spark shell提供python和scala接口來進(jìn)行交互式數(shù)據(jù)分析系馆。Spark SQL提供獨(dú)立的SQL shell來使用SQL探索數(shù)據(jù)送漠,也可以通過標(biāo)準(zhǔn)的Spark程序或Spark shell進(jìn)行SQL查詢。MLlib程序庫進(jìn)行機(jī)器學(xué)習(xí)和數(shù)據(jù)分析由蘑。Spark還支持調(diào)用R或Matlab外部程序闽寡。
數(shù)據(jù)處理
工程師就是使用Spark開發(fā)數(shù)據(jù)處理應(yīng)用的軟件開發(fā)者。他們具備軟件工程概念(封裝尼酿、接口設(shè)計及面向?qū)ο笏枷耄┮罚苁褂霉こ碳夹g(shù)設(shè)計軟件系統(tǒng)。
Spark為開發(fā)用于集群并行執(zhí)行的程序提供了捷徑裳擎。不需要開發(fā)者關(guān)注分布式問題涎永、網(wǎng)絡(luò)通信及程序容錯性。為工程師提供足夠的接口實(shí)現(xiàn)常見的任務(wù)及對應(yīng)用監(jiān)控鹿响、審查和性能調(diào)優(yōu)羡微。
spark簡史
2009 ,Spark誕生于UCBerkeley的AMP實(shí)驗(yàn)室
2010 惶我,Spark正式對外開源
2012-10-15妈倔,Spark 0.6.0發(fā)布。
大范圍的性能改進(jìn)绸贡,增加了一些新特性盯蝴,并對Standalone部署模式進(jìn)行了簡化
2013-02-27,Spark 0.7.0發(fā)布
增加了更多關(guān)鍵特性恃轩,例如:Python API结洼、Spark Streaming的alpha版本等
2013-06-21,Spark接受進(jìn)入Apache孵化器
2013-09-17叉跛,Spark 0.8.0發(fā)布
支持Scala2.9/YARN2.2/Standalone部署模式下調(diào)度的高可用性松忍,shuffle優(yōu)化等
2014-01-24,Spark 0.9.0發(fā)布
增加了GraphX筷厘,機(jī)器學(xué)習(xí)新特性鸣峭,流式計算新特性宏所,核心引擎優(yōu)化(外部聚合、加強(qiáng)對YARN的支持)等
2014-05-26摊溶,Spark 1.0.0發(fā)布
增加了Spark SQL爬骤、MLlib、GraphX和Spark Streaming都增加了新特性并進(jìn)行了優(yōu)化莫换。Spark核心引擎還增加了對安全YARN集群的支持
2014-09-03霞玄,Spark 1.1.0發(fā)布
Spark核心API及Streaming,Python拉岁,SQL坷剧,GraphX和MLlib的bug修復(fù)
2014-12-10,Spark 1.2.0發(fā)布
Spark核心API及Streaming喊暖,Python惫企,SQL,GraphX和MLlib的bug修復(fù)
2015-03-06陵叽,Spark 1.3.0發(fā)布
該版本發(fā)布的最大亮點(diǎn)是新引入的DataFrame API狞尔,對于結(jié)構(gòu)型的DataSet,它提供了更方便更強(qiáng)大的操作運(yùn)算巩掺。偏序。除了DataFrame之外,還值得關(guān)注的一點(diǎn)是Spark SQL成為了正式版本锌半,這意味著它將更加的穩(wěn)定禽车,更加的全面。
2015-06-03刊殉,Spark 1.4.0發(fā)布
該版本將 R API 引入 Spark,同時提升了 Spark 的核心引擎和 MLlib 州胳,以及 Spark Streaming 的可用性
2015-09-09记焊,Spark 1.5.0發(fā)布
Spark 1.5.0是1.x線上的第6個發(fā)行版。這個版本共處理了來自230+contributors和80+機(jī)構(gòu)的1400+個patches栓撞。
Spark 1.5的許多改變都是圍繞在提升Spark的性能遍膜、可用性以及操作穩(wěn)定性。
Spark 1.5.0焦點(diǎn)在Tungsten項目瓤湘,它主要是通過對低層次的組建進(jìn)行優(yōu)化從而提升Spark的性能瓢颅。
Spark 1.5版本為Streaming增加了operational特性,比如支持backpressure弛说。另外比較重要的更新就是新增加了一些機(jī)器學(xué)習(xí)算法和工具挽懦,并擴(kuò)展了Spark R的相關(guān)API。
2015-12-22木人,Spark 1.6.0發(fā)布
該版本含了超過1000個patches信柿,在這里主要展示三個方面的主題:新的Dataset API冀偶,性能提升(讀取Parquet 50%的性能提升,自動內(nèi)存管理渔嚷,streaming state management十倍的性能提升)进鸠,以及大量新的機(jī)器學(xué)習(xí)和統(tǒng)計分析算法。
在Spark1.3.0引入DataFrame,它可以提供high-level functions讓Spark更好地處理數(shù)據(jù)結(jié)構(gòu)和計算婚惫。這讓Catalyst optimizer 和Tungsten execution engine自動加速大數(shù)據(jù)分析烤黍。發(fā)布DataFrame之后開發(fā)者收到了很多反饋,其中一個主要的是大家反映缺乏編譯時類型安全搀罢。為了解決這個問題,Spark采用新的Dataset API (DataFrame API的類型擴(kuò)展)侥猩。Dataset API擴(kuò)展DataFrame API支持靜態(tài)類型和運(yùn)行已經(jīng)存在的Scala或Java語言的用戶自定義函數(shù)榔至。對比傳統(tǒng)的RDD API,Dataset API提供更好的內(nèi)存管理欺劳,特別是在長任務(wù)中有更好的性能提升唧取。
2016-07-20,Spark 2.0.0發(fā)布
該版本主要更新APIs划提,支持SQL 2003枫弟,支持R UDF ,增強(qiáng)其性能鹏往。300個開發(fā)者貢獻(xiàn)了2500補(bǔ)丁程序
2016-12-16淡诗,Spark 2.1.0發(fā)布
這是 2.x 版本線的第二個發(fā)行版。此發(fā)行版在為Structured Streaming進(jìn)入生產(chǎn)環(huán)境做出了重大突破伊履,Structured Streaming 現(xiàn)在支持了event time watermarks了并且支持Kafka0.10
此外韩容,此版本更側(cè)重于可用性,穩(wěn)定性和優(yōu)雅(polish)唐瀑,并解決了1200多個tickets
2017-07-01群凶,Spark 2.2.0發(fā)布
這是 2.x 系列的第三個版本。此版本移除了 Structured Streaming 的實(shí)驗(yàn)標(biāo)記(experimental tag)哄辣,意味著已可以放心在線上使用请梢。
-
該版本的更新內(nèi)容主要針對的是系統(tǒng)的可用性、穩(wěn)定性以及代碼潤色力穗。包括:
Core 和 Spark SQL 的 API 升級和性能毅弧、穩(wěn)定性改進(jìn),比如支持從 Hive metastore 2.0/2.1 中讀取數(shù)據(jù)当窗;支持解析多行的 JSON 或 CSV 文件够坐;移除對 Java 7 的支持;移除對 Hadoop 2.5 及更早版本的支持 等
SparkR 針對現(xiàn)有的 Spark SQL 功能添加了更廣泛的支持,比如 Structured Streaming 為 R 語言提供的 API 咆霜;R 語言支持完整的 Catalog API 邓馒;R 語言支持 DataFrame checkpointing 等
2018-02-23,Spark 2.3.0發(fā)布
這是 2.x 系列中的第四個版本蛾坯。此版本增加了對 Structured Streaming 中的 Continuous Processing 以及全新的 Kubernetes Scheduler 后端的支持
其他主要更新包括新的 DataSource 和 Structured Streaming v2 API光酣,以及一些 PySpark 性能增強(qiáng)。
此外脉课,此版本繼續(xù)改進(jìn)項目的可用性救军、穩(wěn)定性,并持續(xù)潤色代碼倘零。
now