引數說明:該引數用於設定每個stage的預設task數量。這個引數極為重要,如果不設定可能會直接影響你的spark作業效能。
引數調優建議:spark作業的預設task數量為500~1000個較為合適。很多同學常犯的乙個錯誤就是不去設定這個引數,那麼此時就會導致spark自己根據底層hdfs的block數量來設定task的數量,預設是乙個hdfs block對應乙個task。通常來說,spark預設設定的數量是偏少的(比如就幾十個task),如果task數量偏少的話,就會導致你前面設定好的executor的引數都前功盡棄。試想一下,無論你的executor程序有多少個,記憶體和cpu有多大,但是task只有1個或者10個,那麼90%的executor程序可能根本就沒有task執行,也就是白白浪費了資源!因此spark官網建議的設定原則是,設定該引數為num-executors * executor-cores的2~3倍較為合適,比如executor的總cpu core數量為300個,那麼設定1000個task是可以的,此時可以充分地利用spark集群的資源。
引數說明:該引數用於設定rdd持久化資料在executor記憶體中能佔的比例,預設是0.6。也就是說,預設executor 60%的記憶體,可以用來儲存持久化的rdd資料。根據你選擇的不同的持久化策略,如果記憶體不夠時,可能資料就不會持久化,或者資料會寫入磁碟。
引數調優建議:如果spark作業中,有較多的rdd持久化操作,該引數的值可以適當提高一些,保證持久化的資料能夠容納在記憶體中。避免記憶體不夠快取所有的資料,導致資料只能寫入磁碟中,降低了效能。但是如果spark作業中的shuffle類操作比較多,而持久化操作比較少,那麼這個引數的值適當降低一些比較合適。此外,如果發現作業由於頻繁的gc導致執行緩慢(通過spark web ui可以觀察到作業的gc耗時),意味著task執行使用者**的記憶體不夠用,那麼同樣建議調低這個引數的值。
引數說明:該引數用於設定shuffle過程中乙個task拉取到上個stage的task的輸出後,進行聚合操作時能夠使用的executor記憶體的比例,預設是0.2。也就是說,executor預設只有20%的記憶體用來進行該操作。shuffle操作在進行聚合時,如果發現使用的記憶體超出了這個20%的限制,那麼多餘的資料就會溢寫到磁碟檔案中去,此時就會極大地降低效能。
引數調優建議:如果spark作業中的rdd持久化操作較少,shuffle操作較多時,建議降低持久化操作的記憶體佔比,提高shuffle操作的記憶體佔比比例,避免shuffle過程中資料過多時記憶體不夠用,必須溢寫到磁碟上,降低了效能。此外,如果發現作業由於頻繁的gc導致執行緩慢,意味著task執行使用者**的記憶體不夠用,那麼同樣建議調低這個引數的值。下圖task的gc time比較長,此時可以調整
spark.storage.memoryfraction
和spark.shuffle.memoryfraction
,降低rdd可持久化的記憶體佔比和shuffle的記憶體佔比,減少gc時間
spark引數調優
了解完了spark作業執行的基本原理之後,對資源相關的引數就容易理解了。所謂的spark資源引數調優,其實主要就是對spark執行過程中各個使用資源的地方,通過調節各種引數,來優化資源使用的效率,從而提公升spark作業的執行效能。以下引數就是spark中主要的資源引數,每個引數都對應著作業執行原理...
spark 資源引數調優
了解完了spark作業執行的基本原理之後,對資源相關的引數就容易理解了。所謂的spark資源引數調優,其實主要就是對spark執行過程中各個使用資源的地方,通過調節各種引數,來優化資源使用的效率,從而提公升spark作業的執行效能。以下引數就是spark中主要的資源引數,每個引數都對應著作業執行原理...
Spark配置引數調優
cpu各核負載量很不均勻,記憶體也沒有用滿,系統的資源沒有得到充分利用,該如何利用?1 spark的rdd的partition個數建立task的個數是對應的 2 partition的個數在hadoop的rdd中由block的個數決定的。記憶體 系統總記憶體數 work記憶體大小 work數 spar...