spark為什么比mapreduce快?
首先澄清幾個誤區(qū):
1:兩者都是基于內(nèi)存計算的,任何計算框架都肯定是基于內(nèi)存的,所以網(wǎng)上說的spark是基于內(nèi)存計算所以快,顯然是錯誤的
2;DAG計算模型減少的是磁盤I/O次數(shù)(相比于mapreduce計算模型而言),而不是shuffle次數(shù),因為shuffle是根據(jù)數(shù)據(jù)重組的次數(shù)而定,所以shuffle次數(shù)不能減少
所以總結spark比mapreduce快的原因有以下幾點:
1:DAG相比hadoop的mapreduce在大多數(shù)情況下可以減少磁盤I/O次數(shù)
因為mapreduce計算模型只能包含一個map和一個reduce,所以reduce完后必須進行落盤,而DAG可以連續(xù)shuffle的,也就是說一個DAG可以完成好幾個
mapreduce,所以dag只需要在最后一個shuffle落盤,就比mapreduce少了,總shuffle次數(shù)越多,減少的落盤次數(shù)就越多
2:spark shuffle 的優(yōu)化
mapreduce在shuffle時默認進行排序,spark在shuffle時則只有部分場景才需要排序(bypass技師不需要排序),排序是非常耗時的,這樣就可以加快shuffle速度
3:spark支持將需要反復用到的數(shù)據(jù)進行緩存
所以對于下次再次使用此rdd時,不再再次計算,而是直接從緩存中獲取,因此可以減少數(shù)據(jù)加載耗時,所以更適合需要迭代計算的機器學習算法
4:任務級別并行度上的不同
mapreduce采用多進程模型,而spark采用了多線程模型,多進程模型的好處是便于細粒度控制每個任務占用的資源,但每次任務的啟動都會消耗一定的啟動時間,即mapreduce的map task 和reduce task是進程級別的,都是jvm進程,每次啟動都需要重新申請資源,消耗不必要的時間,而spark task是基于線程模型的,通過復用線程池中的線程來減少啟動,關閉task所需要的開銷(多線程模型也有缺點,由于同節(jié)點上所有任務運行在一個進行中,因此,會出現(xiàn)嚴重的資源爭用,難以細粒度控制每個任務占用資源)
作者:京東零售 吳化斌文章來源:http://www.zghlxwxcb.cn/news/detail-833480.html
來源:京東云開發(fā)者社區(qū) 轉(zhuǎn)載請注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-833480.html
到了這里,關于spark為什么比mapreduce快?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!