Spark常规性能调优二:RDD 优化
RDD 復(fù)用
在對(duì) RDD 進(jìn)行算子時(shí),要避免相同的算子和計(jì)算邏輯之下對(duì) RDD 進(jìn)行重復(fù)的計(jì)算
對(duì)上圖中的 RDD 計(jì)算架構(gòu)進(jìn)行修改,得到如下圖所示的優(yōu)化結(jié)果:
RDD 持久化
在 Spark 中,當(dāng)多次對(duì)同一個(gè) RDD 執(zhí)行算子操作時(shí),每一次都會(huì)對(duì)這個(gè) RDD 之前的父 RDD 重新計(jì)算一次,這種情況是必須要避免的,對(duì)同一個(gè) RDD 的重復(fù)計(jì)算是對(duì)資源的極大浪費(fèi),因此,必須對(duì)多次使用的 RDD 進(jìn)行持久化,通過(guò)持久化將公共 RDD 的數(shù)據(jù)緩存到內(nèi)存/磁盤(pán)中,之后對(duì)于公共 RDD 的計(jì)算都會(huì)從內(nèi)存/磁盤(pán)中直接獲取 RDD 數(shù)據(jù)。對(duì)于 RDD 的持久化,有兩點(diǎn)需要說(shuō)明:
? RDD 的持久化是可以進(jìn)行序列化的,當(dāng)內(nèi)存無(wú)法將 RDD 的數(shù)據(jù)完整的進(jìn)行存放的時(shí)候,可以考慮使用序列化的方式減小數(shù)據(jù)體積,將數(shù)據(jù)完整存儲(chǔ)在內(nèi)存中。
? 如果對(duì)于數(shù)據(jù)的可靠性要求很高,并且內(nèi)存充足,可以使用副本機(jī)制,對(duì) RDD 數(shù)據(jù)進(jìn)行持久化。當(dāng)持久化啟用了復(fù)本機(jī)制時(shí),對(duì)于持久化的每個(gè)數(shù)據(jù)單元都存儲(chǔ)一個(gè)副本,放在其他節(jié)點(diǎn)上面,由此實(shí)現(xiàn)數(shù)據(jù)的容錯(cuò),一旦一個(gè)副本數(shù)據(jù)丟失,不需要重新計(jì)算,還可以使用另外一個(gè)副本。
RDD 盡可能早的 filter 操作
獲取到初始 RDD 后,應(yīng)該考慮盡早地過(guò)濾掉不需要的數(shù)據(jù),進(jìn)而減少對(duì)內(nèi)存的占用,從而提升 Spark 作業(yè)的運(yùn)行效率。
總結(jié)
以上是生活随笔為你收集整理的Spark常规性能调优二:RDD 优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spark常规性能调优一:最优资源配置
- 下一篇: spark Docker镜像构建及pus