
文 | Dong
來(lái)源 | 董的博客
概述
Apache Spark的高性能一定程度上取決于它采用的異步并發(fā)模型(這里指server/driver端采用的模型),這與Hadoop 2.0(包括YARN和MapReduce)是一致的。Hadoop 2.0自己實(shí)現(xiàn)了類似Actor的異步并發(fā)模型,實(shí)現(xiàn)方式是epoll+狀態(tài)機(jī),而Apache Spark則直接采用了開源軟件Akka,該軟件實(shí)現(xiàn)了Actor模型,性能非常高。盡管二者在server端采用了一致的并發(fā)模型,但在任務(wù)級(jí)別(特指Spark任務(wù)和MapReduce任務(wù))上卻采用了不同的并行機(jī)制: Hadoop MapReduce采用了多進(jìn)程模型,而Spark采用了多線程模型。
注意,本文的多進(jìn)程和多線程,指的是同一個(gè)節(jié)點(diǎn)上多個(gè)任務(wù)的運(yùn)行模式。無(wú)論是MapReduce和Spark,整體上看,都是多進(jìn)程:MapReduce應(yīng)用程序是由多個(gè)獨(dú)立的Task進(jìn)程組成的;Spark應(yīng)用程序的運(yùn)行環(huán)境是由多個(gè)獨(dú)立的Executor進(jìn)程構(gòu)建的臨時(shí)資源池構(gòu)成的。
多進(jìn)程模型便于細(xì)粒度控制每個(gè)任務(wù)占用的資源,但會(huì)消耗較多的啟動(dòng)時(shí)間,不適合運(yùn)行低延遲類型的作業(yè),這是MapReduce廣為詬病的原因之一。而多線程模型則相反,該模型使得Spark很適合運(yùn)行低延遲類型的作業(yè)。
總之,Spark同節(jié)點(diǎn)上的任務(wù)以多線程的方式運(yùn)行在一個(gè)JVM進(jìn)程中,可帶來(lái)以下好處:
任務(wù)啟動(dòng)速度快,與之相反的是MapReduce Task進(jìn)程的慢啟動(dòng)速度,通常需要1s左右;
同節(jié)點(diǎn)上所有任務(wù)運(yùn)行在一個(gè)進(jìn)程中,有利于共享內(nèi)存。這非常適合內(nèi)存密集型任務(wù),尤其對(duì)于那些需要加載大量詞典的應(yīng)用程序,可大大節(jié)省內(nèi)存。
同節(jié)點(diǎn)上所有任務(wù)可運(yùn)行在一個(gè)JVM進(jìn)程(Executor)中,且Executor所占資源可連續(xù)被多批任務(wù)使用,不會(huì)在運(yùn)行部分任務(wù)后釋放掉,這避免了每個(gè)任務(wù)重復(fù)申請(qǐng)資源帶來(lái)的時(shí)間開銷,對(duì)于任務(wù)數(shù)目非常多的應(yīng)用,可大大降低運(yùn)行時(shí)間。與之對(duì)比的是MapReduce中的Task:每個(gè)Task單獨(dú)申請(qǐng)資源,用完后馬上釋放,不能被其他任務(wù)重用,盡管1.0支持JVM重用在一定程度上彌補(bǔ)了該問題,但2.0尚未支持該功能。
盡管Spark的過線程模型帶來(lái)了很多好處,但同樣存在不足,主要有:
由于同節(jié)點(diǎn)上所有任務(wù)運(yùn)行在一個(gè)進(jìn)程中,因此,會(huì)出現(xiàn)嚴(yán)重的資源爭(zhēng)用,難以細(xì)粒度控制每個(gè)任務(wù)占用資源。與之相反的是MapReduce,它允許用戶單獨(dú)為Map Task和Reduce Task設(shè)置不同的資源,進(jìn)而細(xì)粒度控制任務(wù)占用資源量,有利于大作業(yè)的正常平穩(wěn)運(yùn)行。
下面簡(jiǎn)要介紹MapReduce的多進(jìn)程模型和Spark的多線程模型。
MapReduce多進(jìn)程模型
每個(gè)Task運(yùn)行在一個(gè)獨(dú)立的JVM進(jìn)程中;
可單獨(dú)為不同類型的Task設(shè)置不同的資源量,目前支持內(nèi)存和CPU兩種資源;
每個(gè)Task運(yùn)行完后,將釋放所占用的資源,這些資源不能被其他Task復(fù)用,即使是同一個(gè)作業(yè)相同類型的Task。也就是說(shuō),每個(gè)Task都要經(jīng)歷“申請(qǐng)資源—> 運(yùn)行Task –> 釋放資源”的過程。
Spark多線程模型
每個(gè)節(jié)點(diǎn)上可以運(yùn)行一個(gè)或多個(gè)Executor服務(wù);
每個(gè)Executor配有一定數(shù)量的slot,表示該Executor中可以同時(shí)運(yùn)行多少個(gè)ShuffleMapTask或者ResultTask;
每個(gè)Executor單獨(dú)運(yùn)行在一個(gè)JVM進(jìn)程中,每個(gè)Task則是運(yùn)行在Executor中的一個(gè)線程;
同一個(gè)Executor內(nèi)部的Task可共享內(nèi)存,比如通過函數(shù)SparkContext#broadcast廣播的文件或者數(shù)據(jù)結(jié)構(gòu)只會(huì)在每個(gè)Executor中加載一次,而不會(huì)像MapReduce那樣,每個(gè)Task加載一次;
Executor一旦啟動(dòng)后,將一直運(yùn)行,且它的資源可以一直被Task復(fù)用,直到Spark程序運(yùn)行完成后才釋放退出。
總結(jié)
總體上看,Spark采用的是經(jīng)典的scheduler/workers模式,每個(gè)Spark應(yīng)用程序運(yùn)行的第一步是構(gòu)建一個(gè)可重用的資源池,然后在這個(gè)資源池里運(yùn)行所有的ShuffleMapTask和ResultTask(注意,盡管Spark編程方式十分靈活,不再局限于編寫Mapper和Reducer,但是在Spark引擎內(nèi)部只用兩類Task便可表示出一個(gè)復(fù)雜的應(yīng)用程序,即ShuffleMapTask和ResultTask),而MapReduce應(yīng)用程序則不同,它不會(huì)構(gòu)建一個(gè)可重用的資源池,而是讓每個(gè)Task動(dòng)態(tài)申請(qǐng)資源,且運(yùn)行完后馬上釋放資源。
end
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03