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