一、Spark原理與機制初探

1.Spark

    作爲Spark生態系統的核心,Spark主要提供基於內存計算的功能,不僅包含Hadoop的計算模型MapReduce,還包含很多其他的API,如reduceByKey、groupByKey、foreach、join和filter等。Spark將數據抽象爲RDD,有效地擴充了Spark編程模型,使Spark成爲多面手,能讓交互式查詢、流處理、機器學習和圖計算無縫交叉融合,極大地擴展了Spark的業務應用場景,同時Spark使用函數式編程Scale,使編程更簡潔高效。

2.SQL/Shark

    Shark是爲了將Hive應用移植到Spark平臺下面而出現的數據倉庫。Shark在HQL(一般將Hive上對SQL支持的語言成爲HQL)方面重用了Hive的HQL解析、邏輯計劃翻譯、執行計劃優化等邏輯,可以認爲僅將底層物理執行計劃從Hadoop的MapReduce作業轉移到Spark作業,此外還依賴Hive Metastore和Hive SerDe。這樣做會導致執行計劃過程過於依賴Hive,不利於添加新的優化策略,因此爲了減少對Hive本身框架的依賴,引入了Spark SQL。

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

    Spark SQL從Spark1.3開始支持提供一個抽象的編程架構DataFrames,能充當分佈式SQL查詢引擎。DataFrame本質就是一張關係型數據庫中的表,但是底層有很多方面的優化,他能從多種數據源中轉化而來,例如結構性數據文件、Hive表、外部數據庫或者已經存在的RDD。

3.Spark Streaming

    Spark Streaming是基於Spark的上層應用框架,使用內建API,能像寫批處理文件一樣編寫流處理任務,易於使用,它還提供良好的容錯特性,能在結點宕機情況下同時恢復丟失的工作和操作狀態。

    在處理時間方面,Spark Streaming是基於時間片的準實時處理,能達到妙級延遲,吞吐量比Storm大,此外還能和Spark MLib聯合使用,構造強大的流狀態運行即席(ad-hoc)查詢和實時推薦系統。

4.GraphX

    GraphX是基於Spark的上層分佈式圖計算框架,提供了類似Goole圖算法引擎Pregel的功能,主要處理社交網絡等結點和邊模型的問題,因爲Spark能很好地支付迭代計算,故處理效率優勢明顯。GraphX的較新版本支持PageRank、SVD++和三角形計算等算法。目前國內的淘寶技術部在GraphX方面的應用成果很多。

5.MLlib

    MLlib是Spark生態系統在機器學習領域的重要應用,它充分發揮Spark迭代計算的優勢,比傳統MapReduce模型算法塊一百倍以上。

    MLlib實現了邏輯迴歸、線性SVM、隨即森林、K-means、奇異值分解等多種傳統機器學習的算法,充分利用RDD的迭代優勢,能對大規模數據應用機器學習模型,並能與Spark Streaming、Spark SQL進行協作開發應用,讓機器學習算法在基於大數據的預測、推薦和模式識別等方面應用更廣泛。

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章