您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Spark 和 MR 的區(qū)別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spark 和 MR 的區(qū)別是什么”吧!
先說結(jié)論:Hadoop MapReduce采用了多進程模型,而Spark采用了多線程模型
接下來,來一起分析,這兩種模式的區(qū)別以及優(yōu)缺點:
Apache Spark的高性能一定程度上取決于它采用的異步并發(fā)模型(這里指server/driver 端采用的模型),這與Hadoop 2.X(包括YARN和MapReduce)是一致的。
Hadoop 2.X自己實現(xiàn)了類似Actor的異步并發(fā)模型,實現(xiàn)方式是epoll+狀態(tài)機,而Apache Spark則直接采用了開源軟件Akka,該軟件實現(xiàn)了Actor模型,性能非常高。
盡管二者在 server 端采用了一致的并發(fā)模型,但在任務(wù)級別(特指 Spark任務(wù)和MapReduce任務(wù))上卻采用了不同的并行機制:Hadoop MapReduce采用了多進程模型,而Spark采用了多線程模型。
注意,本文的多進程和多線程,指的是同一個節(jié)點上多個任務(wù)的運行模式。無論是MapReduce和Spark,整體上看,都是多進程:MapReduce應(yīng)用程序是由多個獨立的Task進程組成的;Spark應(yīng)用程序的 運行環(huán)境是由多個獨立的Executor進程構(gòu)建的臨時資源池構(gòu)成的。
多進程模型便于細粒度控制每個任務(wù)占用的資源,但會消耗較多的啟動時間,不適合運行低延遲類型的作業(yè),這是MapReduce廣為詬病的原因之一。而多線程模型則相反,該模型使得Spark很適合運行低延遲類型的作業(yè)。總之,Spark同節(jié)點上的任務(wù)以多線程的方式運行在一個JVM進程中,可帶來以下好處:
1)任務(wù)啟動速度快,與之相反的是MapReduce Task進程的慢啟動速度,通常需要1s左右;
2)同節(jié)點上所有任務(wù)運行在一個進程中,有利于共享內(nèi)存。這非常適合內(nèi)存密集型任務(wù),尤其對于那些需要加載大量詞典的應(yīng)用程序,可大大節(jié)省內(nèi)存。
3) 同節(jié)點上所有任務(wù)可運行在一個JVM進程(Executor)中,且Executor所占資源可連續(xù)被多批任務(wù)使用,不會在運行部分任務(wù)后釋放掉,這避免了每個任務(wù)重復(fù)申請資源帶來的時間開銷,對于任務(wù)數(shù)目非常多的應(yīng)用,可大大降低運行時間。與之對比的是MapReduce中的Task:每個Task單獨申請資源,用完后馬上釋放,不能被其他任務(wù)重用,但是可以通過設(shè)置 mapred.job.reuse.jvm.num.tasks = 大于 0 的值,來開啟 JVM 重用。(開啟 JVM 重用:這個功能的缺點是,開啟JVM重用將一直占用使用到的task插槽,以便進行重用,直到任務(wù)完成后才能釋放。如果某個“不平衡的”job中有某幾個reduce task執(zhí)行的時間要比其他Reduce task消耗的時間多的多的話,那么保留的插槽就會一直空閑著卻無法被其他的job使用,直到所有的task都結(jié)束了才會釋放)
盡管Spark的過線程模型帶來了很多好處,但同樣存在不足,主要有:
1)由于同節(jié)點上所有任務(wù)運行在一個進程中,因此,會出現(xiàn)嚴重的資源爭用,難以細粒度控制每個任務(wù)占用資源。與之相 反的是MapReduce,它允許用戶單獨為Map Task和Reduce Task設(shè)置不同的資源,進而細粒度控制任務(wù)占用資源量,有利于大作業(yè)的正常平穩(wěn)運行。
到此,相信大家對“Spark 和 MR 的區(qū)別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。