Spark SQL工作原理剖析和效能優化

2021-08-16 18:11:11 字數 1924 閱讀 3557

一、工作原理剖析:

spark sql 架構中主要有這幾個關鍵的元件:sqlparser(sql分析程式) ,analyser(分析器) ,optimizer(優化器) ,sparkplan(spark計畫)

sparksql大致的執行流程是這樣的:

1. sql 語句經過sqlparser 完成sql 語句的語法解析功能,解析成unresolved logicalplan(未解析的邏輯計畫);

2. 使用analyser將不同**的unresolved logicalplan和元資料(如hive metastore、schema catalog)進行繫結,生成resolved logicalplan(解析後的邏輯計畫);

3. 使用optimizer 對resolved logicalplan 進行優化,生成optimized logicalplan(優化後的邏輯計畫);

4. 使用sparkplan 將logicalplan(邏輯計畫) 轉換成physicalplan(物理計畫);

5. 使用prepareforexecution() 將physicalplan轉換成可執行物理計畫;

6. 使用execute() 執行可執行物理計畫,生成schemardd 即dataset或dataframe。

具體流程如下圖所示:

二、效能優化

1. 設定shuffle過程中的並行度:spark.sql.shuffle.partitions。預設並行度是200。

如果並行度過低,意味著每個task需要處理的資料量過大,特別是在發生資料傾斜的時候可能會造成某個task執行特別慢,最終影響spark sql作業的完成。

適當增多分割槽可以有效的減輕每個task處理的資料量,同時如果有資料傾斜發生,還能緩解資料傾斜。

調整任務並行度,**如下:

2. 優化sql語句。例如:列裁剪,盡量給出明確的列名,比如select name from

students。不要寫select *的方式。

3. 並行處理查詢結果:對於spark sql查詢的結果,如果資料量比較大,比如超過1000條,那麼就不要一次性collect()到driver再處理。因為資料collect到driver端會造成driver端記憶體的壓力過大,同時資料還需要通過網路到達driver端,這樣會增加網路流量的消耗。

可以使用foreachpartition()運算元,並行處理查詢結果。由於資料並行儲存,資料不需要拉回到driver端,那麼就減少了網路流量的消耗,同時也不會給driver的記憶體帶來壓力。

4. spark.sql.autobroadcastjointhreshold,預設10485760 (10 mb)。在記憶體夠用

的情況下,可以增加其大小,該引數設定了乙個表在join的時候,最大在多大

以內,可以被廣播出去優化效能。

如果是reduce side join可能會出現以下問題:

1.資料傾斜問題,導致單個task任務很難計算完成,影響spark sql作用整體完成。

2.由於在reduce端進行join,意味著需要發生shuffle,而shuffle又是最消耗效能的,這樣會降低spark作業執行效率,增加spark作業執行時間。

如果是map side join,由於是在map端進行join,省去了shuffle,沒有shuffle,spark的作業效率會大大提高,也能避免資料傾斜。

設定spark.sql.autobroadcastjointhreshold引數,**如下:

76 Spark SQL之工作原理剖析以及效能優化

sparksql工作原理剖析.png 執行計畫 只要是在資料庫型別的技術裡面,比如傳統的mysql oracle等,包括現在大資料領域的資料倉儲,比如hive,它的基本的sql執行的模型,都是類似的,首先都是要生成一條sql語句的執行計畫 比如,select name from students 從...

CDN 工作原理剖析

cdn content delivery network 內容分發網路 內容交付網路 cdn 是指一組在地理上分散的伺服器,它們協同工作以提供網際網路內容的快速交付。正確配置的 cdn 還可幫助保護 免受某些常見的惡意攻擊,例如分布式拒絕服務 ddos 攻擊 cdn是否與網路主機相同?雖然 cdn ...

Spark SQL執行原理和架構

一 spark sql執行架構 spark sql對sql語句的處理和關係型資料庫類似,即詞法 語法解析 繫結 優化 執行。spark sql會先將sql語句解析成一棵樹,然後使用規則 rule 對tree進行繫結 優化等處理過程。spark sql由core catalyst hive hive ...