天天看點

流批一體的Spark,是如何做到複雜、大量、快速的資料計算呢?

作者:積極的像風一樣自由

2020年,阿裡巴巴實時計算團隊提出“流批一體”的理念,使用同一套 API、同一套開發範式來實作大資料的流計算和批計算,進而保證處理過程與結果的一緻性。

Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。

一、Spark和Hadoop、MapReduce、Flink的關系

流批一體的Spark,是如何做到複雜、大量、快速的資料計算呢?

Spark和Hadoop的關系:Spark可以與Hadoop進行高度的內建,完美配合使用。Hadoop的HDFS、Hive、HBase負責存儲,Spark負責複雜、大量和快速的資料計算。

Spark 和 MapReduce 的關系:Spark和MapReduce都是可以處理海量資料,但是在處理方式和處理速度上存在着差異。

spark處理資料是基于記憶體的,而MapReduce是基于磁盤處理資料的。Spark預設存儲級别為MEMORY_ONLY,I/O少,速度快,是MapReuce的上百倍。

MapReduce隻支援Java程式設計語言,但是Spark支援Java,Scala,Python和R等多種程式設計語言。

MapReduce主要用于處理結構化資料,Spark支援處理各種資料類型,包括結構化資料,半結構化資料和非結構化資料。

SPARK和Flink的關系:Spark和Flink都屬于流批一體的分布式計算引擎。Flink屬于流處理架構,通過流來模拟批,Spark屬于批處理架構,通過批來模拟流。其分别屬于Lambda架構和Dataflow架構。

二、Spark幹貨要點

Spark 架構的四大元件: Spark SQL(離線批處理); Spark Streaming(實時流處理); Spark MLlib(機器學習),機器學習的算法庫; Spark GraphX(圖計算),圖計算的算法庫。

流批一體的Spark,是如何做到複雜、大量、快速的資料計算呢?

Spark支援哪些資料源: Json,文本檔案、 RDD、 Hive 資料、 HBase 資料。

Spark RDD:RDD(Resilient Distributed Dataset,彈性分布式資料集),是Spark 中最基本的資料抽象。

RDD是隻讀的,想要修改 RDD,隻能生成一個新的 RDD; RDD邏輯上是分區的,通過compute函數得到每個分區的資料;血統機制,RDDS之間維系血緣以來關系;RDDS的彈性,指的是預設存儲在記憶體裡,如果記憶體不足會刷寫到磁盤。

RDD資料來源,從 HDFS 讀取,從其他相容系統讀取,從并行集合生成,從已有的 RDD 生成新的 RDD。

Spark的兩大算子:Transformation 算子和 Action 算子,都是基于 RDD 實作的。Spark Action 算子(行動算子)真正觸發 Spark 應用,資料可以寫出到 HDFS、資料庫、硬碟,但不包含 CPU。

Spark的寬窄依賴:Spark寬依賴,指的是一對多關系(一個RDD可通過一個或多個RDD進行轉換生成), 通過aggregateByKey 、reduceByKey、Join、Group等函數得到; Spark窄依賴:指的是一對一關系(一個RDD通過一個RDD轉換生成), 通過map、filter函數得到。

流批一體的Spark,是如何做到複雜、大量、快速的資料計算呢?

Spark 在 YARN 平台中運作,一個 Container 中可以運作多個 Spark 任務。

Spark 2.0 引入了 Spark Session 的概念,作為使用者統一切入點。

圖檔來自網絡,如有侵權,請聯系我删除,謝謝!

繼續閱讀