存儲格式的選擇:
採起行式仍是列式存儲?
列存儲寫入時次數多,損耗時間多
反過來查詢的時候較快
壓縮格式的選擇:
考慮壓縮速度和壓縮文件的分割性
壓縮可以較少存儲空間、提升數據傳輸速度
Spark中默認的壓縮格式是「snappy」
代碼的優化:
選擇的高性能的算子:
foreachPartition => partitionOfRecords.foreach 得到每一條數據
分區的好處是把partition全部的數據先保存到list當中去,而後咱們在插入MySQL的時候就能夠結合pstmt的批處理,一次過把整個分區數據寫進去
複用已有的數據:
在項目中,若是同時實現多個功能(本例中就是有三個),在計算時觀察每一個功能間是否有重疊產生的數據,如有的話把相應的數據提取出來生成,全部的功能實現都能共用(至關於作一個緩存,把中間數據cache )
參數的優化:
並行度:spark.sql.shuffle.partitions
默認的是200,配置的是partitions的數量,對應了task的數量
若以爲運行得太慢,則須要吧這個值調大
在conf裏面改(YARN啓動時)
分區字段類型推測:spark.sql.sources.partitionColumnTypeInference.enabled
默認爲開啓,若開啓以後系統就會自動推測分區字段的類型
關閉後能提高性能