




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1.簡單總結(jié)MapReduce和Spark的運行機制以及兩者之間的差異?(1)MapReduce的運行機制:在作業(yè)提交之前,用戶對相關(guān)內(nèi)容進行配置。配置作業(yè)完成并確認無誤后,開始執(zhí)行以下工作:①提交作業(yè)。通過調(diào)用JobTracker對象的getNewJobId()從JobTracker處獲取當前作業(yè)的ID號;檢查作業(yè)相關(guān)路徑。在代碼中獲取各個路徑信息時會對作業(yè)的路徑進行檢查;計算作業(yè)的輸入劃分,并將劃分信息寫入Job.split文件,如果寫入失敗就會返回錯誤;將運行作業(yè)所需要的資源復制到對應的HDFS上,包括:作業(yè)的JAR文件、配置文件和計算所得到的輸入劃分信息等;調(diào)用JobTracker對象的submitJob()方法來真正提交作業(yè),JobTracker作業(yè)準備執(zhí)行。②初始化作業(yè)。從HDFS中讀取作業(yè)對應的job.split。JobTracker會從HDFS中對應的路徑獲取JobClient寫入的job.split文件,得到輸入數(shù)據(jù)的劃分信息,為后續(xù)初始化過程中Map任務的分配做好準備;創(chuàng)建并初始化Map任務和Reduce任務。首先,initTask根據(jù)輸入數(shù)據(jù)劃分信息中的個數(shù)設定MapTask的個數(shù),然后為每個MapTask生成一個TaskInProgress來處理inputsplit,并將MapTask放入nonRunningMapCache,最后根據(jù)JobConf中的mapred.reduce.tasks屬性,利用setNumReduceTasks()方法設置reducetask的個數(shù),采用類似MapTask的方法將ReduceTask放入nonRunningReduces中;創(chuàng)建兩個初始化Task,根據(jù)個數(shù)和已經(jīng)配置完成的輸入劃分信息,分別初始化Map和Reduce。③分配任務。TaskTracker和JobTracker之間的通信和任務分配是通過心跳機制按成的。TaskTracker作為一個單獨的JVM執(zhí)行一個簡單的循環(huán),每隔一段時間向JobTracker發(fā)送心跳(Heartbeat),JobTracker在接收到心跳信息后,如果有待分配的任務,就會為TaskTracker分配一個任務,并將分配信息封裝在心跳通信的返回值中,返回給TaskTracker。TaskTracker從Response中得知需要做的事情,如果是一個新的Task,則將它加入本機的任務隊列中。④執(zhí)行任務。TaskTracker申請到新的任務之后,通過調(diào)用localizeJob()方法將任務本地化,即將運行所必需的數(shù)據(jù)、配置信息、程序代碼從HDFS復制到TaskTracker本地,具體步驟包括:將job.split復制到本地;將job.jar復制到本地;將job的配置信息寫入job.xml;創(chuàng)建本地任務目錄,解壓job.jar;調(diào)用launchTaskForJob()方法發(fā)布任務。任務本地化之后,通過launchTaskForJob()方法調(diào)用launchTask()啟動任務。首先使用launchTask()為任務創(chuàng)建本地目錄;然后啟動TaskRunner,其中對于Map任務啟動MapTaskRunner,對于Reduce任務則啟動ReduceTaskRunner;最后,通過TaskRunner啟動新的JVM來運行每個任務。⑤更新任務和狀態(tài)。由MapReduce作業(yè)分割成的每個任務中都有一組計數(shù)器,可以對任務執(zhí)行過程中的進度組成時間進行計數(shù)。在報告進度時,通過設置一個標志以表明狀態(tài)變化,監(jiān)聽線程檢查到這個標志后會告知TaskTracker當前的任務狀態(tài)。同時,TaskTracker在每隔5秒發(fā)送給JobTracker的心跳中分裝任務狀態(tài),報告自己的任務執(zhí)行狀態(tài)。通過心跳機制,所有的TaskTracker的統(tǒng)計信息都會匯總到JobTracker處。JobTracker將這些信息合并起來,產(chǎn)生一個全局的作業(yè)進度統(tǒng)計信息,用來表明正在運行的所有作業(yè),以及其中所含任務的狀態(tài)。最后,JobClient通過每秒查看JobTracker來接收作業(yè)進度的最新狀態(tài)。⑥完成作業(yè)。當JobTracker接收到最后一個任務的已完成通知后,便把作業(yè)的狀態(tài)設置為“成功”。然后,JobClient也將及時得到任務已經(jīng)完成的信號,告知用戶作業(yè)完成,最后從runJob()方法處返回。(2)Spark運行機制①SparkContext注冊。構(gòu)建SparkApplication的運行環(huán)境(啟動SparkContext),SparkContext向資源管理器(可以是Master、ResourceManager等)注冊并申請運行Executor資源(CPUCore和Memory)。②申請資源,啟動StandaloneExecutorBackend,報告Executor狀態(tài)。根據(jù)SparkContext的資源申請要求和Worker心跳周期內(nèi)報告的信息,資源管理器決定在哪個Worker上分配Executor資源,然后在該Worker上獲取資源并啟動StandaloneExecutorBackend。③StandaloneExecutorBackend注冊。StandaloneExecutorBackend向SparkContext注冊。④構(gòu)建DAG圖。Spark應用程序進行各種轉(zhuǎn)換操作,通過行動操作觸發(fā)作業(yè)運行。提交之后,SparkContext解析Applicaiton代碼,根據(jù)RDD之間的依賴關(guān)系構(gòu)建DAG圖,DAG圖提交給DAGScheduler進行解析。⑤將DAG圖分解成Stage。DAGScheduler是面向調(diào)度階段的高層次的調(diào)度器,DAGScheduler把DAG拆分成相互依賴的調(diào)度階段,當遇到寬依賴就劃分為新的調(diào)度階段。每個調(diào)度階段包含一個或多個Stage(或者稱為TaskSet),Stage一般在獲取外部數(shù)據(jù)和shuffle之前產(chǎn)生,這些Stage形成任務集,提交給底層調(diào)度器TaskScheduler進行調(diào)度運行。DAGScheduler記錄哪些RDD被存入磁盤等物化操作,同時要尋求任務的最優(yōu)化調(diào)度,例如:數(shù)據(jù)本地性等。此外,DAGScheduler監(jiān)控運行調(diào)度階段過程,如果某個調(diào)度階段運行失敗,則需要重新提交該調(diào)度階段。⑥提交和監(jiān)控Task。每個TaskScheduler只為一個SparkContext實例服務,TaskScheduler接收來自DAGScheduler發(fā)送過來的任務集后,把任務集以任務的形式一個個分發(fā)到集群Worker節(jié)點的Executor中去運行。如果某個任務運行失敗,TaskScheduler要負責重試;如果TaskScheduler發(fā)現(xiàn)某個任務一直未運行完,就可能啟動同樣的任務運行同一個任務,最后選用先運行完那個任務的結(jié)果。⑦報告Task狀態(tài),直至結(jié)束。Worker收到TaskScheduler發(fā)送過來的任務后,StandaloneExecutorBackend會建立Executor線程池,以多線程的方式運行,每一個線程負責一個任務。任務運行結(jié)束后要返回給TaskScheduler,直至Task完成。不同類型的任務,返回的方式也不同,ShuffleMapTask返回的是一個MapStatus對象,而不是結(jié)果本身;ResultTask根據(jù)結(jié)果的不同,返回的方式也不同。⑧注銷。所有Task完成后,SparkContext向Master注銷,釋放資源。(3)兩者之間的差異①架構(gòu)。Spark采用的是經(jīng)典的scheduler/workers模式,每個Spark應用程序運行的第一步是構(gòu)建一個可重用的資源池,然后在這個資源池里運行所有的ShuffleMapTask和ReduceTask;MapReduce采用了多進程模型,而Spark采用了多線程模型。多進程模型便于細粒度控制每個任務占用的資源,但會消耗較多的啟動時間,不適合運行低延遲類型的作業(yè),這是MapReduce廣為詬病的原因之一。而多線程模型則相反,該模型使得Spark很適合運行低延遲類型的作業(yè)。②速度。spark把中間計算結(jié)果存放在內(nèi)存中,減少迭代過程中的數(shù)據(jù)落地,能夠?qū)崿F(xiàn)數(shù)據(jù)高效共享,迭代運算效率高;當然也有部分計算基于磁盤,比如Shuffle,但是其大量Transformation操作,比如單純的map或者filter等操作可以直接基于內(nèi)存進行pipeline操作。mapreduce中的計算中間結(jié)果是保存在磁盤上的,產(chǎn)生了大量的I/O操作,效率很低。③容錯。spark容錯性高,因為支持DAG(有向無環(huán)圖)圖的分布式,也叫spark有血緣機制,在計算過程中如果出現(xiàn)問題造成數(shù)據(jù)丟失,系統(tǒng)不用重新計算,只需要根據(jù)血緣關(guān)系找到最近的中間過程數(shù)據(jù)進行計算,而且基于內(nèi)存的中間數(shù)據(jù)存儲增加了再次使用的讀取的速度補充:spark引進rdd彈性分布式數(shù)據(jù)集的概念,它是分布在一組節(jié)點中的只讀對象集合,如果數(shù)據(jù)集一部分數(shù)據(jù)丟失,則可以根據(jù)血統(tǒng)來對它們進行重建;另外在RDD計算時可以通過checkpoint來實現(xiàn)容錯,checkpoint有兩種方式,即checkpointdata和loggingtheupdates。④功能。hadoop只提供了map和reduce兩種操作,spark提供的操作類型有很多,大致分為轉(zhuǎn)換和行動操作兩大類。轉(zhuǎn)換操作包括:map,filter,flatmap,sample,groupbykey,reducebykey,union,join,cogroup,mapvalues,sort,partitionby等多種操作,行動操作包括:collect、reduce、lookup和save等操作。另外,Spark提供了SparkRDD、SparkSQL、SparkStreaming、SparkMLlib、SparkGraphX等技術(shù)組件,可以一站式地完成大數(shù)據(jù)領域的離線批處理、交互式查詢、流式計算、機器學習、圖計算等常見的任務,所以具有超強的通用性。2.請舉出一個集中式與分布式系統(tǒng)架構(gòu)綜合運用的案例?招商銀行選擇了集中式和分布式融合的IT基礎架構(gòu),以業(yè)務和IT的適用性選擇平臺。銀行為了支撐核心業(yè)務的發(fā)展,大多采用了基于Power處理器的高端設備,例如PowerRS6000(AIX)或AS400(IBMi)平臺。招商銀行使用基于Power處理器的AS400系統(tǒng)超過20年,形成了一套比較有特色的體系,在系統(tǒng)開發(fā)、運維管理等方面進行了諸多創(chuàng)新實踐。在開發(fā)方面,招商銀行在開發(fā)規(guī)范性、技術(shù)使用充分、工具齊備等方面做得比較好。AS400是性價比極高的一個綜合技術(shù)平臺,它簡單實用,很多理念放在當下仍不過時;開發(fā)運維效率很高,能夠快速地創(chuàng)造價值;可用性很高,能夠滿足銀行核心業(yè)務的嚴苛的可用性要求。銀行核心業(yè)務要求高可靠性和安全性,而AS400本身就是一個比較優(yōu)秀的平臺,可靠性很高。招商銀行的運維部門還做了更多的保障工作,在權(quán)限管理、系統(tǒng)監(jiān)控、安裝部署等方面都形成了一套完整的體系;開發(fā)一系列的監(jiān)控工具,可以秒級監(jiān)控所有應用的請求情況,對異常應用進行針對性的優(yōu)化;通過一鍵部署等工具,讓開發(fā)測試上線過程標準化,降低操作風險。除了承載核心關(guān)鍵業(yè)務,開發(fā)團隊也在分布式架構(gòu)、敏捷開發(fā)、智能化創(chuàng)新應用等方面進行了探索。招商銀行自主研發(fā)了一套分布式交易平臺,其重要交易系統(tǒng)都基于該平臺進行建設,例如高性能支付系統(tǒng),包括網(wǎng)聯(lián)支付、信用卡代授權(quán)、銀聯(lián)無卡這幾個子系統(tǒng),保證了客戶的消費體驗。另外值得一提的是在最高峰值段,招商銀行的基于Power的AS400主機CPU占用保持在40%以下,還有較大的性能余量。如今為了打造最佳的用戶體驗,應用的快速迭代成為剛需,而敏捷開發(fā)成為主流。針對這樣的現(xiàn)實情況,招商銀行成立了項目辦公室、架構(gòu)辦公室等一系列部門,制定了非常完善的開發(fā)流程,提供了完整的開發(fā)規(guī)范和DevOps工具支持,同時通過看板的運用,實現(xiàn)了所有開發(fā)工作的可視化,極大地提高了開發(fā)效率。3.本書中提到多種大數(shù)據(jù)分析處理系統(tǒng),請舉出一個至少應用到其中兩個應用系統(tǒng)的綜合案例?并和單個的處理系統(tǒng)進行對比分析?Twitter每天需要處理用戶發(fā)送的推文數(shù)超過億條,此外還要處理大量的時間線(來自用戶關(guān)注的人的所有推文),這一工程是相當浩大和復雜的。因此,對Twitter的大數(shù)據(jù)處理系統(tǒng)要求非常高。Twitter的大數(shù)據(jù)處理系統(tǒng)Summingbird,實現(xiàn)了批處理和流計算在一個平臺架構(gòu)下的整合(Hadoop+Storm)。允許開發(fā)者以類似于本地Scala或Java的方式編寫MapReduce程序,并在大部分著名的分布式MapReduce平臺(包括
Storm和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 在宿舍用電檢討書
- 小兒缺鐵性貧血護理
- 小兒疾病護理
- 小兒支氣管炎課件
- 寫字樓攤位出售合同范本
- 二胎全職媽媽離婚協(xié)議書
- 農(nóng)業(yè)科研人員離職協(xié)議書
- 小兒抽搐查因課件
- 小兒截肢的護理
- 三亞旅游創(chuàng)業(yè)知識培訓課件
- 高鐵保潔管理制度
- 風電項目地質(zhì)災害專項應急預案
- 《廣聯(lián)達培訓教程》課件
- 減少門診投訴PDCA課件
- 職業(yè)暴露與防護41p
- 醫(yī)療廢物處理登記表
- 左手流程-右手人才-章義伍
- 橋梁安全事故案例警示
- 智慧樹創(chuàng)意學經(jīng)濟答案-2018創(chuàng)意學經(jīng)濟期末答案
- YY 0054-2023血液透析設備
- 黃岡市臨床重點??粕陥?模板-副本
評論
0/150
提交評論