哪里有做網(wǎng)站培訓(xùn)的百度熱議排名軟件
spark為什么比mapreduce快?
首先澄清幾個(gè)誤區(qū):
1:兩者都是基于內(nèi)存計(jì)算的,任何計(jì)算框架都肯定是基于內(nèi)存的,所以網(wǎng)上說(shuō)的spark是基于內(nèi)存計(jì)算所以快,顯然是錯(cuò)誤的
2;DAG計(jì)算模型減少的是磁盤(pán)I/O次數(shù)(相比于mapreduce計(jì)算模型而言),而不是shuffle次數(shù),因?yàn)閟huffle是根據(jù)數(shù)據(jù)重組的次數(shù)而定,所以shuffle次數(shù)不能減少
所以總結(jié)spark比mapreduce快的原因有以下幾點(diǎn):
1:DAG相比hadoop的mapreduce在大多數(shù)情況下可以減少磁盤(pán)I/O次數(shù)
因?yàn)閙apreduce計(jì)算模型只能包含一個(gè)map和一個(gè)reduce,所以reduce完后必須進(jìn)行落盤(pán),而DAG可以連續(xù)shuffle的,也就是說(shuō)一個(gè)DAG可以完成好幾個(gè)
mapreduce,所以dag只需要在最后一個(gè)shuffle落盤(pán),就比mapreduce少了,總shuffle次數(shù)越多,減少的落盤(pán)次數(shù)就越多
2:spark shuffle 的優(yōu)化
mapreduce在shuffle時(shí)默認(rèn)進(jìn)行排序,spark在shuffle時(shí)則只有部分場(chǎng)景才需要排序(bypass技師不需要排序),排序是非常耗時(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是基于線程模型的,通過(guò)復(fù)用線程池中的線程來(lái)減少啟動(dòng),關(guān)閉task所需要的開(kāi)銷(xiāo)(多線程模型也有缺點(diǎn),由于同節(jié)點(diǎn)上所有任務(wù)運(yùn)行在一個(gè)進(jìn)行中,因此,會(huì)出現(xiàn)嚴(yán)重的資源爭(zhēng)用,難以細(xì)粒度控制每個(gè)任務(wù)占用資源)
作者:京東零售 吳化斌
來(lái)源:京東云開(kāi)發(fā)者社區(qū) 轉(zhuǎn)載請(qǐng)注明來(lái)源