spark優化筆記(一)

2021-12-29 19:47:39 字數 1350 閱讀 2440

spark sql 幾點總結:

1、合適的資料列,寫sql時要只提取業務需要的列如selecta,b from tbl,禁止寫成select * from tbl,減少網路資料傳輸,及磁碟io,記憶體的占用。

2、對於頻繁使用的表或查詢才進行快取,對於只使用一次的表不需要快取。

3、對於join操作,優先快取較小的表

4、要多注意stage的監控,多思考如何才能更多的task使用process_local

通常讀取資料process_local>node_local>any

5、要多注意storage的監控,多思考如何才能fractioncached的比例更多。

6、盡量少用引起shuffle的action

7、合適的task,park的預設值是200。task過多,會產生很多的任務啟動開銷,task多少,每個task的處理時間過長,容易straggle。

8、多觀察stage中的task,檢視最耗時的task,查詢原因並改善。

9、join時on的條件匹配表的字段中,如果有大量為null的資料時,需要先進行非空處理,防止資料傾斜。

10、可以考慮使用序列:使用kryo優化系列化效能。(目前測試效能提公升不是很明顯,不知道是不是我用的方式有問題)

11、小的rdd(比如幾百m,或者一兩g)可以作為廣播變數

12、盡量避免使用shuffle類運算元,shuffle過程簡單來說就是將分布在集群中多個節點上的同乙個key拉取到同乙個節點上,進行聚合或join等操作,比如reducebykey join等運算元操作都會觸發shuffle操作,

shuffle過程中,各個節點上相同的key都會先寫入本地磁碟檔案中,然後其他節點需要通過網路傳輸拉取各個節點上的磁碟檔案中的相同key,而且相同key拉取到乙個節點上進行聚合操作時,還有可能會因為乙個節點上處理的key過多,導致記憶體不夠存放,進而yi寫到磁碟檔案中,因此在shuffle過程中,可能會發生大量的磁碟檔案的io操作,以及資料的網路傳輸操作,磁碟io和網路傳輸也是shuffle效能較差的原因。,因此我們在開發中,能避免則盡可能的避免使用reducebykey、join、distinct、repartition等、盡量使用map類的非shuffle運算元。這樣的話沒有shuffle操作或者僅有較少shuffle操作的spark作業,可以大大減少效能開銷。

13、避免建立重複的rdd,盡可能的復用同乙個rdd

14、慎用order by 排序尤其是對於大表操作

15、現有工程,開發前注意檢視公用模組文件,如果業務存在,直接使用。

16、rddlineage(血緣關係)設計、運算元(map、reduce等)的合理使用、特殊操作的優化

17、大表和小表關聯查詢使用 map-site join

注意spark的資源利用率,並行度等問題的優化。

Spark學習筆記(一) spark簡介

spark是基於記憶體計算的大資料平行計算框架。09年誕生於加州大學伯克利分校amplab.spark是mapreduce的替代方案,相容hdfs hive等分布式儲存層,可融入hadoop的生態系統,以彌補mapreduce的不足。其主要優勢如下 中間結果輸出 可以將多stage的任務串聯或者並行...

spark學習筆記一

一 執行spark shell的2種方式 1.scala spark shell 2.python pyspark 二.spark訪問hadoop hdfs檔案 準備工作 file 上傳到hdfs hadoop fs put test.log input test.log spark shell裡執...

Spark 學習筆記 一

1.分割槽 為了讓多個執行器並行地工作,spark 將資料分解成多個資料塊,每個資料塊叫做乙個分割槽。分割槽是位於集群中的一台物理機上的多行資料的集合,dataframe 的分割槽也說明了在執行過程 中,資料在集群中的物理分布。如果只有乙個分割槽,即使擁有數千個執行器,spark 也只有一 個執行器...