1. 程式人生 > >Spark原理 | 初學Spark

Spark原理 | 初學Spark

什麼是Spark?
Spark是一個分散式計算引擎,2009年誕生於UC伯克利的AMPLab,2010年開源並於2013年成為Apache頂級專案。

image

Spark具有如下特點:

1.快速
DAG框架
Spark採用的是DAG框架,DAG是在MapReduce框架基礎上演化而來。

對於一些複雜的資料處理,比如有多個Reduce Stage,MapReduce框架中一個Reduce前面必須要有一個Map(Map-Reduce-Map-Reduce...),不能多個Reduce級聯處理,這樣會導致處理過程中會增加很多冗餘的Map階段,即使Map不做任何資料處理(讀取HDFS資料直接輸出),但是這個過程耗費了很多時間和資源。
DAG框架可以任意的組合Map/Reduce的運算元(如Map-Reduce-Reduce),更加靈活更快速。
如Tez(Tez也是DAG)文件裡面有例子說明,詳見

https://cwiki.apache.org/confluence/display/Hive/Hive+on+Tez, 其中以一個TPC-DS的例子進行了說明。

MapReduce是多程序模型,雖然可以更細粒度控制task佔用的資源,但是JVM啟動會消耗更多的時間,Spark則採用的是多執行緒模型,task啟動快,不同的task可以共享記憶體;

Spark可以對RDD資料集進行cache,對迭代計算很友好更快速

Spark的效能優化專案Tungsten Project(https://www.slideshare.net/databricks/spark-performance-whats-next)

 ,對計算過程中的記憶體管理/CPU快取友好等方面進行了很多優化。如WholeStageCodeGen,對火山模型(Volcano Model)進行了優化,減少了函式呼叫等。

2.易用
支援SQL/Scala/Java/Python/R語言

運算元豐富
使用者可以將運算元進行組合完成資料處理,如wordcount ,只需要寫幾行程式碼,相對於MapReduce實現Map和Reduce要簡單很多。