spark調優經驗(待續)
來源:程序員人生 發布時間:2014-11-03 08:59:57 閱讀次數:2936次
spark調優是需要根據業務需要調劑的,其實不是說某個設置是1成不變的,就比如機器學習1樣,是在不斷的調試中找出當前業務下更優的調優配置。下面零碎的總結了1些我的調優筆記。
spark 存儲的時候存在嚴重的分配不均的現象,有幾臺機器在過渡使用, 有幾臺機器卻很少被使用,有幾臺機器緩存了幾10個上百個RDD blocks 有的機器1個RDD blocks 都沒有,這樣存儲有RDD blocks 的可以進行運算,運算的tasks 最多為該機器core數。
spark.storage.memoryFraction 分配給用于緩存RDD的內存的比例
比如如果spark.executor.memory 30g spark.storage.memoryFraction 0.5 則用于緩存的內存為14G 多, 默許留1些做其他用。
每個RDD blocks 的大小不1定是64兆 可能小于64兆,另外如果driver不是子節點,driver 程序運行的節點上的用于緩存的內存 ,就不會被使用。
事實上1個兩3G 的數據 需要用的緩存也最少需要兩3G,如果中間進程中還有產生RDD 且也需要緩存到內存,則需要分配更多的內存用于緩存。在緩存足夠多的情況的
更多的內存不足毛病提示(OOM) 來源于計算的時候產生的1些中間對象即計算所需要的內存。
所以分配用于緩存的內存 應當是這么算的, 比如我有10G的文件,4臺機器,則每臺機器最少2.5g緩存,如果每臺機器分配給excutor 的內存為10g ,則memoryFraction 則最少為0.25 最好配大1些,但不能太大, 太大會致使計算內存不夠。而且如果中間進程還有產生新的RDD,則需要根據實際情況調大memoryFraction。
RDD 緩存散布不均勻 是影響spark 的很大的性能之1,為何這么說?
由于有的機器分配給用于RDD 緩存的內存都用完了 ,這樣相對而言在這個機器上計算的開消也會大,有的機器緩存占用的內存很少,就算用這個機器來計算,還需要啟動Node_local 模式,這樣會影響計算的時間。
調優進程也遇到了1些問題,還沒解決,比如:
為何1個2G 的數據,默許塊大小為64M. default.parallelism 設置成100,可它總是不按這個數據來分,比如常常分成了108個blocks,影響partions個數的參數還有哪些?還有我明明有4個節點,但常常有節點被分配的RDD 和計算都很少很少,這類資源浪費的情況應當怎樣調解?
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈