離線批處理之Spark


Spark簡介

    Spark是基於內存的分布式批處理系統,它把任務拆分,然后分配到多個的CPU上進行處理,處理數據時產生的中間產物(計算結果)存放在內存中,減少了對磁盤的I/O操作,大大的提升了數據的處理速度,在數據處理和數據挖掘方面比較占優勢。

Spark應用場景

  • 數據處理(Data Processing):可以用來快速處理數據,兼具容錯性和可擴展性。
  • 迭代計算(Iterative Computation):支持迭代計算,有效應對復雜的數據處理邏輯。
  • 數據挖掘(Data Mining):在海量數據基礎上進行復雜的挖掘分析,可支持多種數據挖掘和機器學習算法。
  • 流式處理(Streaming Processing):支持秒級延遲的流處理,可支持多種外部數據源。
  • 查詢分析(Query Analysis):支持SQL的查詢分析,同時提供領域特定語言(DSL)以方便操作結構化數據,並支持多種外部數據源。

Spark對比MapReduce

  • 性能上提升了100倍。
  • Spark的中間數據放在內存中,對於迭代運算的效率更高;進行批處理時更高效,同時有着更低的延遲。
  • Spark提供更多的數據集操作類型,編程模型比MapReduce更靈活,開發效率更高。
  • 更高的容錯能力(血統機制)。

RDD

RDD是分布式彈性數據集,可以理解一個存儲數據的數據結構。Spark會把所要操作的數據,加載到RDD上,即RDD所有操作都是基於RDD來進行的。RDD是只讀和可分區。要想對RDD進行操作,只能重新生成一個新的RDD。

  • 從HDFS輸入創建,或從與Hadoop兼容的其他存儲系統中輸入創建。
  • 從父的RDD轉換的到新的RDD。
  • 從數據集合轉換而來,通過編碼實現。

RDD的存儲:

  • 用戶可以選擇不同的存儲級別緩存RDD以便重用。
  • 當前RDD默認是存儲於內存,但當內存不足時,RDD會溢出到磁盤中。

Shuffle

Shuffle 是划分 DAG 中 stage 的標識,同時影響 Spark 執行速度的關鍵步驟

  • RDD 的 Transformation 函數中,分為窄依賴(narrow dependency)和寬依賴(wide dependency)的操作.
  • 窄依賴跟寬依賴的區別是是否發生Shuffle(洗牌) 操作。

窄依賴

窄依賴是指父RDD的每個分區只被子RDD的一個分區所使用。 表現為: 一個父RDD的每一個分區對應於一個子RDD分區。

寬依賴

寬依賴是指父RDD的每個分區都可能被多個子RDD分區所使用。 表現為: 父RDD的每個分區都被多個子RDD分區使用

Transformation

Transformation是RDD的算子類型,它的返回值還是一個RDD。

Transformation操作屬於懶操作(算子),不會真正觸發RDD的處理計算。

變換方法的共同點:

  • 不會馬上觸發計算。
  • 每當調用一次變換方法,都會產生一個新的RDD。

例如:map(func),flatMap(func)

Action

Action是RDD的算子,它的返回值不是一個RDD。Action操作是返回結果或者將結果寫入存儲的操作。Action是Spark應用啟動執行的觸發動作,得到RDD的相關計算結果或將RDD保存到文件系統中。

SparkConf

SparkConf是用來對Spark進行任務參數配置的對象。 是通過鍵值對的形式,設置Spark任務執行時所需要的參數。 Spark讀取任務參數的優先級是: 代碼配置>動態參數>配置文件。

SparkContext

SparkContext是Spark的入口,相當於應用程序的main函數。

SparkContext表示與Spark集群的連接,可用於在該集群上創建RDD,記錄計算結果和環境配置等信息。

SparkSession

Spark2.0中引入了SparkSession的概念,為用戶提供了一個統一的切入點來使用Spark的各項功能。

封裝了SparkConf和SparkContext對象,方便用戶使用Spark的各種API。

SparkSQL簡介

SparkSQL是Spark用來處理結構化數據的一個模塊,可以在Spark應用中直接使用SQL語句對數據進行操作。

SQL語句通過SparkSQL模塊解析為RDD執行計划,交給SparkCore執行。

通過SparkSession提交SQL語句。任務像普通Spark應用一樣,提交到集群中分布式運行。

JDBC:

  • 應用加載JDBC驅動,然后統一提交到集群的JDBCServer執行。
  • JDBCServer是單點服務,會成為任務執行的瓶頸,不能處理海量數據和高並發任務。

DataSet:

  • DataSet是一個由特定域的對象組成的強類型集合,可通過功能或關系操作並行轉換其中的對象
  • DataSet以Catalyst邏輯執行計划表示,並且數據以編碼的二進制形式存儲,不需要反序列化就可以執行sort、filter、shuffle等操作。
  • Dataset是“懶惰”的,只在執行action操作時觸發計算。當執行action操作時,Spark用查詢優化程序來優化邏輯計划,並生成一個高效的並行分布式的物理計

SparkSQL使用場景

適合: 結構化數據處理。 對數據處理的實時性要求不高的場景 需要處理PB級的大容量數據。

不適合: 實時數據查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM