配置於spark-default.conf
1. #spark.yarn.applicationMaster.waitTries 5
用於applicationMaster等待Spark master的次數以及SparkContext初始化嘗試的次數 (一般不用設置)
2.spark.yarn.am.waitTime 100s
3.spark.yarn.submit.file.replication 3
應用程序上載到HDFS的復制份數
4.spark.preserve.staging.files false
設置為true,在job結束后,將stage相關的文件保留而不是刪除。 (一般無需保留,設置成false)
5.spark.yarn.scheduler.heartbeat.interal-ms 5000
Spark application master給YARN ResourceManager 發送心跳的時間間隔(ms)
6.spark.yarn.executor.memoryOverhead 1000
此為vm的開銷(根據實際情況調整)
7.spark.shuffle.consolidateFiles true
僅適用於HashShuffleMananger的實現,同樣是為了解決生成過多文件的問題,采用的方式是在不同批次運行的Map任務之間重用Shuffle輸出文件,也就是說合並的是不同批次的Map任務的輸出數據,但是每個Map任務所需要的文件還是取決於Reduce分區的數量,因此,它並不減少同時打開的輸出文件的數量,因此對內存使用量的減少並沒有幫助。只是HashShuffleManager里的一個折中的解決方案。
8.spark.serializer org.apache.spark.serializer.KryoSerializer
暫時只支持Java serializer和KryoSerializer序列化方式
9.spark.kryoserializer.buffer.max 128m
允許的最大大小的序列化值。
10.spark.storage.memoryFraction 0.3
用來調整cache所占用的內存大小。默認為0.6。如果頻繁發生Full GC,可以考慮降低這個比值,這樣RDD Cache可用的內存空間減少(剩下的部分Cache數據就需要通過Disk Store寫到磁盤上了),會帶來一定的性能損失,但是騰出更多的內存空間用於執行任務,減少Full GC發生的次數,反而可能改善程序運行的整體性能。
11.spark.sql.shuffle.partitions 800
一個partition對應着一個task,如果數據量過大,可以調整次參數來減少每個task所需消耗的內存.
12.spark.sql.autoBroadcastJoinThreshold -1
當處理join查詢時廣播到每個worker的表的最大字節數,當設置為-1廣播功能將失效。
13.spark.speculation false
如果設置成true,倘若有一個或多個task執行相當緩慢,就會被重啟執行。(事實證明,這種做法會造成hdfs中臨時文件的丟失,報找不到文件的錯)
14.spark.shuffle.manager tungsten-sort
tungsten-sort是一種類似於sort的shuffle方式,shuffle data還有其他兩種方式 sort、hash. (不過官網說 tungsten-sort 應用於spark 1.5版本以上)
15.spark.sql.codegen true
Spark SQL在每次執行次,先把SQL查詢編譯JAVA字節碼。針對執行時間長的SQL查詢或頻繁執行的SQL查詢,此配置能加快查詢速度,因為它產生特殊的字節碼去執行。但是針對很短的查詢,可能會增加開銷,因為它必須先編譯每一個查詢
16.spark.shuffle.spill false
如果設置成true,將會把spill的數據存入磁盤
17.spark.shuffle.consolidateFiles true
我們都知道shuffle默認情況下的文件數據為map tasks * reduce tasks,通過設置其為true,可以使spark合並shuffle的中間文件為reduce的tasks數目。
18.代碼中 如果filter過濾后 會有很多空的任務或小文件產生,這時我們使用coalesce或repartition去減少RDD中partition數量。