自貢做網(wǎng)站的公司深圳在線制作網(wǎng)站
Spark 為什么比 MapReduce 快總結(jié)
首先澄清幾個(gè)誤區(qū):
????????1)兩者都是基于內(nèi)存計(jì)算的,任何計(jì)算框架都肯定是基于內(nèi)存的,所以說網(wǎng)上所說的 Spark 是基于內(nèi)存計(jì)算所以快,顯然是錯(cuò)誤的。
????????2)DAG 計(jì)算模型減少的是磁盤 1/0 次數(shù)(相比于 MapReduce 計(jì)算模型而言),而不是shuffle次數(shù),因?yàn)?shuffle 是根據(jù)數(shù)據(jù)重組的數(shù)次而定,所以 shufle 次數(shù)不能減少。
所以總結(jié) Spark 比MapReduce 快的原因有以下幾點(diǎn):
????????1)DAG 相比Hadoop 的MapReduce 在大多數(shù)情況下可以減少磁盤1/0次數(shù)。因?yàn)?MapReduce 計(jì)算模型只能包含一個(gè)Map 和一個(gè)Reduce,所以 Reduce 完后必須進(jìn)行落盤,而DAG 可以連續(xù) shuffle 的,也就是說一個(gè) DAG 可以完成好幾個(gè)MapReduce,所以DAG 只需要在最后一次reduce 落盤,這就比mapreduce少了,總shuffle 次數(shù)越多,減少的落盤次數(shù)越多。
????????2)Spark shuffle 的優(yōu)化。MapReduce 在 Shuffle 時(shí)默認(rèn)進(jìn)行排序。Spark 在Shuffle 時(shí)則只有部分場(chǎng)景才需要排序 (bypass 機(jī)制不需要排序)。排序是非常耗時(shí)的,這樣就可以加快 shuffle 速度。。
????????3)Spark 支持將需要反復(fù)用到的數(shù)據(jù)進(jìn)行緩存。所以對(duì)于下次再次使用此 RDD時(shí),不用再次計(jì)算,而是直接從緩存中獲取,因此可以減少數(shù)據(jù)加口載耗時(shí),所以更適合需要迭代計(jì)算的機(jī)器學(xué)習(xí)算法。
????????4)任務(wù)級(jí)別井行度上的不同。MapReduce 采用了多進(jìn)程模型,而 Spark 采用了多線程模型。多進(jìn)程模型的好處是便于細(xì)粒度控制每個(gè)任務(wù)占用的資源,但每次任務(wù)的啟動(dòng)都會(huì)消耗一定的啟動(dòng)時(shí)間,即MapReduce 的Map Task和Reduce Task是進(jìn)程級(jí)別的,都是 jvm 進(jìn)程,每次啟動(dòng)都需要重新申請(qǐng)資源,消耗了不必要的時(shí)間。而 Spark Task 則是基于線程模型的,通過復(fù)用線程池中的線程來減少啟動(dòng)關(guān)閉 task 所需要的開銷。(多線程模型也有缺點(diǎn),由于同節(jié)點(diǎn)上所有任務(wù)運(yùn)行在一個(gè)進(jìn)程中,因此,會(huì)出現(xiàn)嚴(yán)重的資源爭(zhēng)用,難以細(xì)粒度控制每個(gè)任務(wù)占用資源)