2015-10-07 94 views
2

我現在正在學習this article on Apache Spark architecturespark.shuffle.safetyFraction和spark.storage.safetyFraction的區別

有兩個安全級分按描述: spark.shuffle.safetyFractionspark.storage.safetyFraction它們分別給定爲0.8及JVM的0.9。 洗牌需要0.2的spark.shuffle.safetyFraction而存儲需要0.6的spark.storage.safetyFraction。 給出的圖像然而誤導(其中一個評論證實了這一點的)

我的問題是:

如何洗牌和存儲可以採用0.8和JVM的內存相同的0.9? 他們分享?那麼,在最壞的情況下會發生什麼?

我GOOGLE了,但沒有得到任何這些文件。 任何幫助表示讚賞! :)

回答

0

這些配置僅供內部使用,未向公衆公開,請參閱this pull request。您可以改爲設置memoryFraction

0

JVM堆可分爲三個部分: 存儲,執行(隨機)和其他 儲存:在默認堆大小,由spark.storage.memoryfraction(默認值:0.6)控制60%,而火花。 storage.safetyFraction控制我們可以分配的實際大小,默認爲0.9,這意味着我們必須預留10%以避免OOM,在90%的存儲中,20%用於展開

洗牌:20%默認情況下堆大小是由spark.shuffle.memoryfraction控制的,但是出於安全原因,我們不能使用它們,所以我們引入了另一個參數來控制它,它是spark.shuffle.safetyFraction,默認爲0.8。

其他:保留,堆大小的20%。