2020年,阿裡巴巴實時計算團隊提出“流批一體”的理念,使用同一套 API、同一套開發範式來實作大資料的流計算和批計算,進而保證處理過程與結果的一緻性。
Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。
一、Spark和Hadoop、MapReduce、Flink的關系
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支援哪些資料源: 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 在 YARN 平台中運作,一個 Container 中可以運作多個 Spark 任務。
Spark 2.0 引入了 Spark Session 的概念,作為使用者統一切入點。
圖檔來自網絡,如有侵權,請聯系我删除,謝謝!