天天看點

《Spark大資料分析實戰》——1.1節初識Spark

本節書摘來自華章社群《spark大資料分析實戰》一書中的第1章,第1.1節初識spark,作者高彥傑 倪亞宇,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

1.1 初識spark

spark是基于記憶體計算的大資料并行計算架構,因為它基于記憶體計算,是以提高了在大資料環境下資料處理的實時性,同時保證了高容錯性和高可伸縮性,允許使用者将spark部署在大量廉價硬體之上,形成叢集。

1.?spark執行的特點

hadoop中包含計算架構mapreduce和分布式檔案系統hdfs。

spark是mapreduce的替代方案,而且相容hdfs、hive等分布式存儲層,融入hadoop的生态系統,并彌補mapreduce的不足。

(1)中間結果輸出

spark将執行工作流抽象為通用的有向無環圖執行計劃(dag),可以将多stage的任務串聯或者并行執行,而無需将stage的中間結果輸出到hdfs中,類似的引擎包括flink、dryad、tez。

(2)資料格式和記憶體布局

spark抽象出分布式記憶體存儲結構彈性分布式資料集rdd,可以了解為利用分布式的數組來進行資料的存儲。rdd能支援粗粒度寫操作,但對于讀取操作,它可以精确到每條記錄。spark的特性是能夠控制資料在不同節點上的分區,使用者可以自定義分區政策。

(3)執行政策

spark執行過程中不同stage之間需要進行shuff?le。shuff?le是連接配接有依賴的stage的橋梁,上遊stage輸出到下遊stage中必須經過shuff?le這個環節,通過shuff?le将相同的分組資料拆分後聚合到同一個節點再處理。spark shuff?le支援基于hash或基于排序的分布式聚合機制。

(4)任務排程的開銷

spark采用了事件驅動的類庫akka來啟動任務,通過線程池的複用線程來避免系統啟動和切換開銷。

2.?spark的優勢

spark的一站式解決方案有很多的優勢,分别如下所述。

(1)打造全棧多計算範式的高效資料流水線

支援複雜查詢與資料分析任務。在簡單的“map”及“reduce”操作之外,spark還支援sql查詢、流式計算、機器學習和圖算法。同時,使用者可以在同一個工作流中無縫搭配這些計算範式。

(2)輕量級快速處理

spark代碼量較小,這得益于scala語言的簡潔和豐富表達力,以及spark通過external datasource api充分利用和內建hadoop等其他第三方元件的能力。同時spark基于記憶體計算,可通過中間結果緩存在記憶體來減少磁盤i/o以達到性能的提升。

(3)易于使用,支援多語言

spark支援通過scala、java和python編寫程式,這允許開發者在自己熟悉的語言環境下進行工作。它自帶了80多個算子,同時允許在shell中進行互動式計算。使用者可以利用spark像書寫單機程式一樣書寫分布式程式,輕松利用spark搭建大資料記憶體計算平台并充分利用記憶體計算,實作海量資料的實時處理。

(4)與external data source多資料源支援

spark可以獨立運作,除了可以運作在當下的yarn叢集管理之外,它還可以讀取已有的任何hadoop資料。它可以運作多種資料源,比如parquet、hive、hbase、hdfs等。這個特性讓使用者可以輕易遷移已有的持久化層資料。

(5)社群活躍度高

spark起源于2009年,當下已有超過600多位工程師貢獻過代碼。開源系統的發展不應隻看一時之快,更重要的是一個活躍的社群和強大的生态系統的支援。

同時也應該看到spark并不是完美的,rdd模型适合的是粗粒度的全局資料并行計算;不适合細粒度的、需要異步更新的計算。對于一些計算需求,如果要針對特定工作負載達到最優性能,還需要使用一些其他的大資料系統。例如,圖計算領域的graphlab在特定計算負載性能上優于graphx,流計算中的storm在實時性要求很高的場合要更勝spark streaming一籌。

繼續閱讀