SPARK默認(rèn)的存儲(chǔ)級(jí)別是A: MEMORY_ONLY。
專業(yè)分析:
1. **MEMORY_ONLY**:這是Spark的默認(rèn)存儲(chǔ)級(jí)別。在這種模式下,RDD(彈性分布式數(shù)據(jù)集)的各個(gè)分區(qū)會(huì)被存儲(chǔ)在內(nèi)存中。如果內(nèi)存不足以存儲(chǔ)所有的數(shù)據(jù)分區(qū),那么那些不能被存儲(chǔ)的分區(qū)將會(huì)在每次需要的時(shí)候重新計(jì)算。這種存儲(chǔ)級(jí)別適用于內(nèi)存充足且計(jì)算開(kāi)銷(xiāo)相對(duì)較低的場(chǎng)景。
2. **MEMORY_ONLY_SER**:與MEMORY_ONLY類似,但在存儲(chǔ)之前會(huì)對(duì)對(duì)象進(jìn)行序列化,這可以減少內(nèi)存使用,但會(huì)增加CPU的開(kāi)銷(xiāo),因?yàn)樾蛄谢头葱蛄谢切枰?jì)算資源的。
3. **MEMORY_AND_DISK**:在這種存儲(chǔ)級(jí)別下,RDD的分區(qū)會(huì)優(yōu)先存儲(chǔ)在內(nèi)存中,如果內(nèi)存不足,則會(huì)將無(wú)法存儲(chǔ)的分區(qū)寫(xiě)入磁盤(pán)。這種方式適用于內(nèi)存不足以存儲(chǔ)整個(gè)數(shù)據(jù)集,但又希望避免過(guò)多的重新計(jì)算開(kāi)銷(xiāo)的場(chǎng)景。
4. **MEMORY_AND_DISK_SER**:類似于MEMORY_AND_DISK,但會(huì)對(duì)對(duì)象進(jìn)行序列化。這種方式進(jìn)一步減少了內(nèi)存占用,但增加了CPU的開(kāi)銷(xiāo)。
總結(jié)來(lái)說(shuō),Spark選擇MEMORY_ONLY作為默認(rèn)存儲(chǔ)級(jí)別是因?yàn)樵谠S多情況下,內(nèi)存訪問(wèn)速度遠(yuǎn)快于磁盤(pán)訪問(wèn),且很多計(jì)算場(chǎng)景下內(nèi)存是足夠的,因此優(yōu)先使用內(nèi)存來(lái)提高性能。不過(guò),如果內(nèi)存不夠用,開(kāi)發(fā)者可以根據(jù)具體需求選擇其他存儲(chǔ)級(jí)別。