天天看點

初識spark:取代MapReduce的記憶體計算利器

Spark初見

Spark是一個基于記憶體的開源計算架構,于2009年誕生于加州大學伯克利分校AMPLab(AMP:Algorithms,Machines,People),它最初屬于伯克利大學的研究性項目,後來在2010年正式開源,并于 2013 年成為了 Apache 基金項目,到2014年便成為 Apache 基金的頂級項目,該項目整個發展曆程剛過六年時間,但其發展速度非常驚人。

Spark發展史及近況

Spark起初隻是一個學術性研究項目,從創立到如今蜚聲海外并且在大資料領域成為風尖浪口的熱門項目隻花了6年左右的時間,其具體發展大事記如下。

​2009年Spark誕生于伯克利AMPLab。

​項目在2010年早些時候開源,很多早期關于Spark系統的思想在不同論文中發表。

​項目開源之後,在GitHub上成立了Spark開發社群并在2013年成為Apache孵化項目。

​該項目在2014年2月成為Apache頂級項目。

​2014年5月30日Spark 1.0.0版正式上線。

​截止到2015年,Spark官方維護營運公司Databricks已經組織并舉辦了三年Spark Summit技術峰會。

Spark項目組核心成員在2013年建立了Databricks公司,到目前為止已經在San Francisco連續舉辦了從2013年到2015年的Spark Summit峰會。會議得到大資料主流廠商Hortonworks、IBM、cloudera、MAPR和Pivotal等公司的支援和大資料方案解決商Amazon、DATASTAX和SAP等公司的合作,Spark的使用者和應用量一直在迅速增加。

初識spark:取代MapReduce的記憶體計算利器
初識spark:取代MapReduce的記憶體計算利器

Spark從2010年到2015年間社群開源工作者的數量不斷增加,而且速度越來越快,在這些代碼貢獻者中出現很多中國公司和開發者的身影。例如目前世界上最大的Spark叢集在騰訊,擁有高達8000個節點;最大的單任務處理資料量達到1PB,這項記錄是由阿裡巴巴公司和databricks公司共同持有。中國之是以能在這方面發展迅速,因為中國市場體量巨大,資訊産業發展背後積累了更多資料,進而産生更為迫切的大資料處理需求,最後通過市場需求來推動技術發展。

除了影響力巨大的Spark Summit之外,Spark社群還不定期地在全球各地召開小型的Meetup活動。其中在中國的北京、上海和深圳都有相應的Spark技術分享的Meetup 活動,并且活動受到亞信、微軟和InfoQ等公司的大力贊助。Spark Meetup Group已經遍布北美、歐洲、亞洲和大洋洲。

Spark生态系統

Spark設計目的是全棧式解決批處理、結構化資料查詢、流計算、圖計算和機器學習業務場景,此外其通用性還展現在對存儲層(如HDFS、cassandra)和資源管理層(MESOS、YARN)的支援。下圖是Spark生态系統,在Spark Core的上層有支援SQL查詢的子項目Spark SQL、支援機器學習的MLlib庫、支援圖計算的GraphX以及支援流計算的Spark Streaming等。這樣的生态圈讓Spark的核心RDD抽象資料集能在不同應用中使用,大大減少資料轉換的消耗和運維管理的資源。

初識spark:取代MapReduce的記憶體計算利器

如圖所示的生态系統被AMPLab稱為伯克利資料分析棧(BDAS:Berkeley Data Analytics Stack,),下面對BDAS中的主要項目進行介紹。

1

Spark

作為Spark生态系統的核心,Spark主要提供基于記憶體計算的功能,不僅包含Hadoop的計算模型的MapReduce,還包含很多其他的如reduceByKey、groupByKey、foreach、join和filter等API。Spark将資料抽象為彈性分布式資料集,有效擴充了Spark程式設計模型,能讓Spark成為多面手,能讓互動式查詢、流處理、機器學習和圖計算的應用無縫交叉融合,極大的擴張了Spark的應用業務場景,同時Spark使用函數式程式設計語言Scala,讓程式設計更簡潔高效。

2

SQL/Shark

Shark是為了将Hive應用移植到Spark平台下而出現的資料倉庫。Shark在HQL(一般将Hive上對SQL支援的語言稱為HQL)方面重用了Hive的HQL解析、邏輯計劃翻譯、執行計劃優化等邏輯,可以認為僅将底層實體執行計劃從Hadoop的MR作業轉移到Spark作業,此外還賴Hive Metastore和Hive SerDe。這樣做會導緻執行計劃過于依賴Hive,不友善添加新的優化政策,是以為了減少對Hive本身架構的依賴,引入Spark SQL解決上述問題。

Spark SQL僅依賴HQL Parser、Hive metastore和Hive SerDe,即說明在解析SQL生成抽象文法樹(Abstract Syntax Tree,AST)後的部分都是由Spark SQL自身的Calalyst負責,利用scala模式比對等函數式語言的特性,讓Catalyst開發的執行計劃優化政策比Hive更簡潔。除了HQL以外,Spark SQL還内建了一個精簡的SQL parser,以及一套Scala特定領域語言(Domain Specific Language, DSL)。也就是說,如果隻是使用Spark SQL内建的SQL方言或Scala DSL對原生RDD對象進行關系查詢,使用者在開發Spark應用時完全不需要依賴Hive的任何東西,因而日後的發展趨勢重點在Spark SQL,對Shark的支援會逐漸淡化。

Spark SQL從Spark1.3開始支援提供一個抽象的程式設計結構DataFrames,能充當分布式SQL查詢引擎。DataFrame本質就是一張關系型資料庫中的表,但是底層有很多方面的優化,它能從多種資料源中轉化而來,例如結構型資料檔案(如Avro, Parquet, ORC, JSON和JDBC)、Hive表、外部資料庫或已經存在的RDD。

初識spark:取代MapReduce的記憶體計算利器

3

Spark Streaming

Spark Streaming是基于Spark的上層應用架構,使用内建API,能像寫批處理檔案一樣編寫流處理任務,易于使用,它還提供良好的容錯特性,能在節點當機情況下同時恢複丢失的工作和操作狀态。

在處理時間方面,Spark Streaming是基于時間片準實時處理,能達到秒級延遲,吞吐量比Storm大,此外還能和Spark SQL與Spark MLlib聯合使用,建構強大的流狀态運作即席(ad-hoc)查詢和實時推薦系統。

4

GraphX

GraphX是另一個基于Spark的上層的分布式圖計算架構,提供了類似Google圖算法引擎Pregel的功能,主要處理社交網絡等節點和邊模型的問題。因為Spark能很好的支援疊代計算,故處理效率優勢明顯。GraphX的最新版(Spark 1.4.1)支援PageRank、SVD++和三角形計數等算法。目前國内的淘寶技術部在graphX方面的應用成果很多,可以參考http://rdc.taobao.org了解更多資訊。

5

MLlib

MLlib是Spark生态系統在機器學習領域的重要應用,它充分發揮Spark疊代計算的優勢,能比傳統MapReduce模型算法快100倍以上。

MLlib 1.3實作了邏輯回歸、線性SVM、随機森林、K-means、奇異值分解等多種分布式機器學習算法,充分利用RDD的疊代優勢,能對大規模資料應用機器學習模型,并能與Spark Streaming、Spark SQL進行協作開發應用,讓機器學習算法在基于大資料的預測、推薦和模式識别等方面應用更廣泛。

6

Tachyon

Tachyon是基于記憶體的分布式檔案系統。過去Spark的計算功能和記憶體管理都在JVM中,導緻JVM負載較高,同時各任務共享資料也不友善,當JVM崩潰後很多緩沖資料也會丢失,為了解決上述問題,進而衍生出Tachyon技術。

初識spark:取代MapReduce的記憶體計算利器

繼續閱讀