spark是通過借鑒Hadoop mapreduce發展而來,繼承了其分布式並行計算的優點,並改進了mapreduce明顯的缺陷,具體表現在以下幾方面:
1.spark把中間計算結果存放在內存中,減少迭代過程中的數據落地,能夠實現數據高效共享,迭代運算效率高。mapreduce中的計算中間結果是保存在磁盤上的,這樣必然影響整體運行速度。
2.spark容錯性高。spark支持DAG圖的分布式並行計算(簡單介紹以下spark DAG:即有向無環圖,描述了任務間的先后依賴關系,spark中rdd經過若干次transform操作,由於transform操作是lazy的,因此,當rdd進行action操作時,rdd間的轉換關系也會被提交上去,得到rdd內部的依賴關系,進而根據依賴,划分出不同的stage。),它引進rdd彈性分布式數據集的概念,它是分布在一組節點中的只讀對象集合,如果數據集一部分數據丟失,則可以根據血統來對它們進行重建;另外在RDD計算時可以通過checkpoint來實現容錯,checkpoint有兩種方式,即checkpiont data 和logging the updates。
3.spark更加通用。hadoop只提供了map和reduce兩種操作,spark提供的操作類型有很多,大致分為轉換和行動操作兩大類。轉換操作包括:map,filter,flatmap,sample,groupbykey,reducebykey,union,join,cogroup,mapvalues,sort,partitionby等多種操作,行動操作包括:collect,reduce,lookup和save等操作
這里要注意:spark 操作實際分為四類:
a.創建操作:用於創建RDD。RDD創建只有兩種方法,一種是讀取外部文件和內存集合,另一種是通過transform轉換操作生成。
b.轉換操作:將RDD通過一定的操作轉換成新的RDD。RDD的轉換操作是惰性操作,它只是定義了一個新的RDD,並沒有立即執行。
c.控制操作:進行RDD持久化,科技將RDD按不同的存儲策略保存在磁盤或內存中,比如cache接口默認將RDD緩存在內存中。
d.行動操作:能夠觸發spark運行的操作,舉個栗子,對RDD進行COLLECT就是行動操作。spark中的行動操作分為兩類,一類的操作結果是變成scala集合或變量,另一類是將RDD保存到外部文件系統或數據庫中。