合肥地區(qū)網(wǎng)站制作關(guān)鍵詞優(yōu)化資訊
Spark 為什么比 mapreduce 快?
最重要的3點(diǎn),
數(shù)據(jù)緩存 : 中間結(jié)果可以緩存在內(nèi)存中復(fù)用
資源管理 :executor task 管理,不同stage的task可以運(yùn)行在同一個(gè)executor上
任務(wù)調(diào)度 :? dag 對(duì)比多階段mr
1.任務(wù)模型的優(yōu)化(DAG圖對(duì)比多階段的MR,啟動(dòng)申請(qǐng)資源耗時(shí)更少)
- mapreduce框架中,一個(gè)程序只能擁有一個(gè)map一個(gè)reduce的過程,如果運(yùn)算邏輯很復(fù)雜,一個(gè)map+一個(gè)reduce是表述不出來的,可能就需要多個(gè)map-reduce的過程;mapreduce框架想要做到這個(gè)事情,就需要把第一個(gè)map-reduce過程產(chǎn)生的結(jié)果,寫入HDFS,然后由第二個(gè)map-reduce過程去hdfs讀取后計(jì)算,完成后又將結(jié)果寫入HDFS,再交由第三個(gè)map-reduce過程去計(jì)算! 重點(diǎn)!!!–這樣一來,一個(gè)復(fù)雜的運(yùn)算,在mapreduce框架中可能就會(huì)發(fā)生很多次寫入并讀取HDFS的操作,而讀寫HDFS是很慢的事情
- spark框架,采用的是以rdd為核心,dag為調(diào)度,把上面的mapreduce-mapreduce-mapreduce的過程,連續(xù)執(zhí)行,不需要反復(fù)落地到HDFS,這樣就會(huì)比mapreduce快很多啦
2.Spark支持在內(nèi)存中緩存結(jié)果(基于RDD, RDD分布式彈性數(shù)據(jù)集, rdd.cache(),數(shù)據(jù)可復(fù)用)
比如一個(gè)復(fù)雜邏輯中 ,一個(gè)map-reduce產(chǎn)生的結(jié)果A,如果在后續(xù)的map-reduce過程中需要反復(fù)用到,spark可以把A緩存到內(nèi)存中,這樣后續(xù)的map-reduce過程就只需要從內(nèi)存中讀取A即可,也會(huì)加快速度
3.資源模型不同 (spark擁有更完善的資源管理方案,task可以復(fù)用core)
spark是多線程模型,每個(gè)worker節(jié)點(diǎn)運(yùn)行一個(gè)或多個(gè)executor服務(wù),每個(gè)task作為線程運(yùn)行在executor中,task間可共享資源,
而MR是多進(jìn)程模型,任務(wù)調(diào)度(頻繁申請(qǐng)、釋放資源)和啟動(dòng)開銷大,不適合低延遲類型作業(yè)
Spark 對(duì)比 mapreduce的優(yōu)勢(shì)有哪些
- 計(jì)算模型優(yōu)勢(shì),spark的核心技術(shù)是彈性分布式數(shù)據(jù)集(Resilient Distributed Datasets),提供了比 MapReduce 豐富的模型,可以快速在內(nèi)存中對(duì)數(shù)據(jù)集 進(jìn)行多次迭代,來支持復(fù)雜的數(shù)據(jù)挖掘算法和圖形計(jì)算算法。。
- Spark 和 Hadoop 的根本差異是多個(gè)作業(yè)之間的數(shù)據(jù)通信問題 : Spark 多個(gè)作業(yè)之間數(shù)據(jù) 通信是基于內(nèi)存,而 Hadoop 是基于磁盤。
- Spark Task的啟動(dòng)時(shí)間快。Spark采用fork線程的方式,而Hadoop采用創(chuàng)建新的進(jìn)程 的方式。
- Spark只有在shuffle的時(shí)候?qū)?shù)據(jù)寫入磁盤,而Hadoop中多個(gè)MR作業(yè)之間的數(shù)據(jù)交 互都要依賴于磁盤交互
- Spark的緩存機(jī)制比HDFS的緩存機(jī)制高效。