您好,登錄后才能下訂單哦!
Spark的核心調優參數是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
num-executors:
該參數用于設置Spark作業總共要用多少個Executor進程來執行。Driver在向YARN集群管理器申請資源時,YARN集群管理器會盡可能按照你的設置來在集群的各個工作節點上,啟動相應數量的Executor進程。這個參數非常之重要,如果不設置的話,默認只會給你啟動少量的Executor進程,此時你的Spark作業的運行速度是非常慢的。(建議50~100個左右的Executor進程)
executor-memory:
該參數用于設置每個Executor進程的內存。Executor內存的大小,很多時候直接決定了Spark作業的性能,而且跟常見的JVMOOM異常,也有直接的關聯。(根據作業大小不同,建議設置4G~8G,num-executors乘以executor-memory,是不能超過隊列的最大內存量的)
executor-cores:
該參數用于設置每個Executor進程的CPUcore數量。這個參數決定了每個Executor進程并行執行task線程的能力。因為每個CPUcore同一時間只能執行一個task線程,因此每個Executor進程的CPUcore數量越多,越能夠快速地執行完分配給自己的所有task線程。(建議設置為2~4個,且num-executors*executor-cores不要超過隊列總CPUcore的1/3~1/2)
driver-memory:
該參數用于設置Driver進程的內存(建議設置512M到1G)。
spark.default.parallelism:
該參數用于設置每個stage的默認task數量。這個參數極為重要,如果不設置可能會直接影響你的Spark作業性能。(建議為50~500左右,缺省情況下Spark自己根據底層HDFS的block數量來設置task的數量,默認是一個HDFSblock對應一個task。Spark官網建議設置該參數為num-executors*executor-cores的2~3倍較為合適)
spark.storage.memoryFraction:
該參數用于設置RDD持久化數據在Executor內存中能占的比例,默認是0.6(原則上是盡可能保證數據能夠全部在內存中,但如果發現作業發生頻繁的GC,就該考慮是否調小)
spark.shuffle.memoryFraction:
該參數用于設置shuffle過程中一個task拉取到上個stage的task的輸出后,進行聚合操作時能夠使用的Executor內存的比例,默認是0.2。也就是說,Executor默認只有20%的內存用來進行該操作。shuffle操作在進行聚合時,如果發現使用的內存超出了這個20%的限制,那么多余的數據就會溢寫到磁盤文件中去,此時就會極大地降低性能。(shuffle操作較多時,建議降低持久化操作的內存占比,提高shuffle操作的內存占比比例,避免shuffle過程中數據過多時內存不夠用,必須溢寫到磁盤上,降低了性能)
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。