真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hadoop之MapReduce工作原理-創(chuàng)新互聯(lián)

Hadoop由兩部分組成,分別是分布式文件系統(tǒng)HDFS和分布式計(jì)算框架MapReduce。其中,分布式文件系統(tǒng)HDFS主要用于大規(guī)模數(shù)據(jù)的分布式存儲(chǔ),而MapReduce則構(gòu)建在分布式文件系統(tǒng)上,對(duì)于存儲(chǔ)在分布式文件系統(tǒng)的數(shù)據(jù)進(jìn)行分布式計(jì)算。

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的溫宿網(wǎng)站建設(shè)公司,溫宿接單;提供網(wǎng)站制作、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行溫宿網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

1  MapReduce設(shè)計(jì)目標(biāo)

    HadoopMapReduce誕生于搜索領(lǐng)域,主要解決搜索引擎面臨的海量數(shù)據(jù)處理擴(kuò)展性差的問(wèn)題。它的實(shí)現(xiàn)很大程度上借鑒了Google MapReduce的設(shè)計(jì)思想,包括簡(jiǎn)化編程接口、提高系統(tǒng)容錯(cuò)性等??偨Y(jié)HadoopMapReduce設(shè)計(jì)目標(biāo),主要有以下幾個(gè):

1、易于編程:傳統(tǒng)的分布式程序設(shè)計(jì)非常復(fù)雜,用戶(hù)需要關(guān)注的細(xì)節(jié)非常多,比如數(shù)據(jù)分片、數(shù)據(jù)傳輸、節(jié)點(diǎn)間通信等。因而設(shè)計(jì)分布式程序的門(mén)檻非常高。Hadoop的一個(gè)重要設(shè)計(jì)目標(biāo)是簡(jiǎn)化分布式程序設(shè)計(jì),將所有并行程序均需要關(guān)注的設(shè)計(jì)細(xì)節(jié)抽象成公共模塊并交由系統(tǒng)實(shí)現(xiàn),而用戶(hù)只需專(zhuān)注于自己的應(yīng)用程序邏輯實(shí)現(xiàn),這樣簡(jiǎn)化了分布式程序設(shè)計(jì)且提高了開(kāi)發(fā)效率。

2、良好的擴(kuò)展性:隨著公司業(yè)務(wù)的發(fā)展,積累的數(shù)據(jù)量會(huì)越來(lái)越大,當(dāng)數(shù)據(jù)量增加到一定程度后,現(xiàn)有的集群可能已經(jīng)無(wú)法滿(mǎn)足其計(jì)算能力和存儲(chǔ)能力,這時(shí)候管理員可能期望通過(guò)添加機(jī)器以達(dá)到線(xiàn)性擴(kuò)展集群能力的目的。

3、高容錯(cuò)性:在分布式環(huán)境下。隨著集群規(guī)模的增加,集群中的故障率(這里的故障包括磁盤(pán)損壞、機(jī)器宕機(jī)、節(jié)點(diǎn)間通訊失敗等硬件故障和壞數(shù)據(jù)或者用戶(hù)程序bug產(chǎn)生的軟件故障)會(huì)顯著增加,進(jìn)而導(dǎo)致任務(wù)失敗和數(shù)據(jù)丟失的可能性增加,為此,Hadoop通過(guò)計(jì)算遷移或者數(shù)據(jù)遷移等策略提高集群的可用性與容錯(cuò)性。

2  MapReduce原理

2.1 MapReduce編程模型

    MapReduce采用"分而治之"的思想,把對(duì)大規(guī)模數(shù)據(jù)集的操作,分發(fā)給一個(gè)主節(jié)點(diǎn)管理下的各個(gè)分節(jié)點(diǎn)共同完成,然后通過(guò)整合各個(gè)節(jié)點(diǎn)的中間結(jié)果,得到最終結(jié)果。簡(jiǎn)單地說(shuō),MapReduce就是"任務(wù)的分解與結(jié)果的匯總"。

在Hadoop中,用于執(zhí)行MapReduce任務(wù)的機(jī)器角色有兩個(gè):一個(gè)是JobTracker;另一個(gè)是TaskTracker,JobTracker是用于調(diào)度工作的,TaskTracker是用于執(zhí)行工作的。一個(gè)Hadoop集群中只有一臺(tái)JobTracker。

在分布式計(jì)算中,MapReduce框架負(fù)責(zé)處理了并行編程中分布式存儲(chǔ)、工作調(diào)度、負(fù)載均衡、容錯(cuò)均衡、容錯(cuò)處理以及網(wǎng)絡(luò)通信等復(fù)雜問(wèn)題,把處理過(guò)程高度抽象為兩個(gè)函數(shù):map和reduce,map負(fù)責(zé)把任務(wù)分解成多個(gè)任務(wù),reduce負(fù)責(zé)把分解后多任務(wù)處理的結(jié)果匯總起來(lái)。

需要注意的是,用MapReduce來(lái)處理的數(shù)據(jù)集(或任務(wù))必須具備這樣的特點(diǎn):待處理的數(shù)據(jù)集可以分解成許多小的數(shù)據(jù)集,而且每一個(gè)小數(shù)據(jù)集都可以完全并行地進(jìn)行處理。

2.2 Hadoop MapReduce架構(gòu)

同HDFS一樣,Hadoop MapReduce也采用了Master/Slaves(M/S)架構(gòu),如下圖所示,它主要由以下幾個(gè)組件組成:Client、JobTracker、TaskTracker和Task。

Hadoop之MapReduce工作原理

    下面分別對(duì)這幾個(gè)組件進(jìn)行介紹:

    A、Client

    用戶(hù)編寫(xiě)的MapReduce程序通過(guò)Client提交到JobTracker端。同時(shí)。用戶(hù)可以通過(guò)Client提供的一些接口查看作業(yè)運(yùn)行狀態(tài)。在Hadoop內(nèi)部用“作業(yè)”(Job)表示MapReduce程序。一個(gè)MapReduce程序可以對(duì)應(yīng)若干個(gè)作業(yè),而每個(gè)作業(yè)被分解成若干個(gè)Map/Reduce任務(wù)(Task)。

    B、JobTracker

    JobTracker主要負(fù)責(zé)資源監(jiān)控和作業(yè)調(diào)度。JobTracker監(jiān)控所有TaskTracker與作業(yè)的健康狀況,一旦發(fā)現(xiàn)失敗情況后,其會(huì)將相應(yīng)的任務(wù)轉(zhuǎn)移到其它節(jié)點(diǎn)。同時(shí),JobTracker會(huì)跟蹤任務(wù)的執(zhí)行進(jìn)度、資源使用量等信息,并將這些信息告訴任務(wù)調(diào)度器,而調(diào)度器會(huì)在資源出現(xiàn)空閑時(shí),選擇合適的任務(wù)使用這些資源。在Hadoop中,任務(wù)調(diào)度器是一個(gè)可插拔的模塊,用戶(hù)可以根據(jù)自己的需要設(shè)計(jì)相應(yīng)的調(diào)度器。

    C、TaskTracker

    TaskTracker會(huì)周期性地通過(guò)Heartbeat將本節(jié)點(diǎn)上資源的使用情況和任務(wù)的運(yùn)行進(jìn)度匯報(bào)給JobTracker,同時(shí)接收J(rèn)obTracker發(fā)送過(guò)來(lái)的命令并執(zhí)行相應(yīng)的操作(例如啟動(dòng)新任務(wù)、殺死任務(wù)等)。

    TaskTracker使用“slot”等量劃分本節(jié)點(diǎn)的數(shù)量,“slot”代表計(jì)算資源(CPU、內(nèi)存等)。

    一個(gè)Task獲取到一個(gè)slot后才有機(jī)會(huì)運(yùn)行,而Hadoop調(diào)度器的作用就是將各個(gè)TaskTracker上的空閑slot分配給Task使用。

    Slot分為Map slot和Reduce slot兩種,分別提供Map Task和Reduce Task。TaskTracker通過(guò)slot數(shù)目限定Task的并發(fā)度。

    D、Task

    Task分為Map Task和Reduce Task兩種,均有TaskTracker啟動(dòng)。我們知道,HDFS以固定大小的block為基本單位存儲(chǔ)數(shù)據(jù),而對(duì)于MapReduce而言,其處理基本單位是分片(split).

    split是一個(gè)邏輯概念,它只包含一些元數(shù)據(jù)信息,比如數(shù)據(jù)起始位置、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)所在節(jié)點(diǎn)等等。它的劃分方法完全由用戶(hù)自己決定,但是建議split的劃分大小與HDFS的block大小一致。

    需要注意的是,split的多少?zèng)Q定Map Task的數(shù)目,因?yàn)槊總€(gè)split會(huì)交由一個(gè)Map Task處理。

    Split與blcok的對(duì)應(yīng)關(guān)系圖:

Hadoop之MapReduce工作原理

    MapTask先將對(duì)應(yīng)的split迭代解析成一個(gè)個(gè)key/value對(duì),依次調(diào)用用戶(hù)自定義的map函數(shù)進(jìn)行處理,最終將臨時(shí)結(jié)果存放到本地磁盤(pán)上,其中臨時(shí)數(shù)據(jù)被分成若干個(gè)partition,每個(gè)partition將被一個(gè)ReduceTask處理。

    ReduceTask分為三個(gè)階段:第一步,從遠(yuǎn)程節(jié)點(diǎn)上讀取Map Task中間結(jié)果,稱(chēng)為Shuffle階段。第二步,按照key對(duì)key/value進(jìn)行排序,稱(chēng)為Sort階段。第三步,依次讀取,調(diào)用用戶(hù)自定義的reduce函數(shù)處理,并將最終結(jié)果存到HDFS上,稱(chēng)為Reduce階段。

2.3 Hadoop MapReduce作業(yè)的生命周期

    這段主要講解Map Reduce的物理實(shí)體作業(yè)的生命周期,即從作業(yè)提交到運(yùn)行結(jié)束的整個(gè)過(guò)程。如下圖所示:

Hadoop之MapReduce工作原理

步驟 1 作業(yè)提交與初始化。用戶(hù)提交作業(yè)后,首先由 JobClient 實(shí)例將作業(yè)相關(guān)信息,比如將程序 jar 包、作業(yè)配置文件、分片元信息文件等上傳到分布式文件系統(tǒng)(一般為HDFS)上,其中,分片元信息文件記錄了每個(gè)輸入分片的邏輯位置信息。然后JobClient 通過(guò) RPC通知JobTracker。JobTracker收到新作業(yè)提交請(qǐng)求后,由作業(yè)調(diào)度模塊對(duì)作業(yè)進(jìn) 行初始化 :為作業(yè)創(chuàng)建一個(gè)JobInProgress對(duì)象以跟蹤作業(yè)運(yùn)行狀況,而 JobInProgress 則會(huì)為每個(gè)Task創(chuàng)建一個(gè)TaskInProgress 對(duì)象以跟蹤每個(gè)任務(wù)的運(yùn)行狀態(tài),TaskInProgress 可能需要管理多個(gè)“Task 運(yùn)行嘗試”(稱(chēng)為“Task Attempt”)。

步驟 2 任務(wù)調(diào)度與監(jiān)控。前面提到,任務(wù)調(diào)度和監(jiān)控的功能均由JobTracker 完成。 TaskTracker 周期性地通過(guò)Heartbeat向JobTracker匯報(bào)本節(jié)點(diǎn)的資源使用情況,一旦出現(xiàn)空閑資源,JobTracker會(huì)按照一定的策略選擇一個(gè)合適的任務(wù)使用該空閑資源,這由任務(wù)調(diào) 度器完成。任務(wù)調(diào)度器是一個(gè)可插拔的獨(dú)立模塊,且為雙層架構(gòu),即首先選擇作業(yè),然后從該作業(yè)中選擇任務(wù),其中,選擇任務(wù)時(shí)需要重點(diǎn)考慮數(shù)據(jù)本地性。此外,JobTracker跟蹤作業(yè)的整個(gè)運(yùn)行過(guò)程,并為作業(yè)的成功運(yùn)行提供全方位的保障。首先,當(dāng)TaskTracker或者Task失敗時(shí),轉(zhuǎn)移計(jì)算任務(wù) ;其次,當(dāng)某個(gè)Task執(zhí)行進(jìn)度遠(yuǎn)落后于同一作業(yè)的其他 Task 時(shí), 為之啟動(dòng)一個(gè)相同 Task,并選取計(jì)算快的Task結(jié)果作為最終結(jié)果。

步驟 3  任務(wù)運(yùn)行環(huán)境準(zhǔn)備。運(yùn)行環(huán)境準(zhǔn)備包括JVM啟動(dòng)和資源隔離,均由TaskTracker 實(shí)現(xiàn)。TaskTracker為每個(gè)Task啟動(dòng)一個(gè)獨(dú)立的JVM 以避免不同Task在運(yùn)行過(guò)程中相互影響;同時(shí),TaskTracker使用了操作系統(tǒng)進(jìn)程實(shí)現(xiàn)資源隔離以防止Task濫用資源。

步驟 4 任務(wù)執(zhí)行。TaskTracker 為 Task 準(zhǔn)備好運(yùn)行環(huán)境后,便會(huì)啟動(dòng)Task。在運(yùn)行過(guò) 程中,每個(gè) Task 的最新進(jìn)度首先由 Task 通過(guò) RPC 匯報(bào)給TaskTracker,再由 TaskTracker 匯報(bào)給JobTracker。

步驟 5 作業(yè)完成。待所有 Task 執(zhí)行完畢后,整個(gè)作業(yè)執(zhí)行成功。

2.4 Hadoop MapReduce作業(yè)的運(yùn)行機(jī)制

    這些按照時(shí)間順序包括:輸入分片(input split)、map階段、combiner階段、shuffle階段和reduce階段。

    1) 輸入分片(input split):在進(jìn)行map計(jì)算之前,mapreduce會(huì)根據(jù)輸入文件計(jì)算輸入分片(input split),每個(gè)輸入分片(input split)針對(duì)一個(gè)map任務(wù),輸入分片(input split)存儲(chǔ)的并非數(shù)據(jù)本身,而是一個(gè)分片長(zhǎng)度和一個(gè)記錄數(shù)據(jù)的位置的數(shù)組,輸入分片(input split)往往和hdfs的block(塊)關(guān)系很密切,假如我們?cè)O(shè)定hdfs的塊的大小是64mb,如果我們輸入有三個(gè)文件,大小分別是3mb、65mb和127mb,那么mapreduce會(huì)把3mb文件分為一個(gè)輸入分片(input split),65mb則是兩個(gè)輸入分片(input split)而127mb也是兩個(gè)輸入分片(input split),換句話(huà)說(shuō)我們?nèi)绻趍ap計(jì)算前做輸入分片調(diào)整,例如合并小文件,那么就會(huì)有5個(gè)map任務(wù)將執(zhí)行,而且每個(gè)map執(zhí)行的數(shù)據(jù)大小不均,這個(gè)也是mapreduce優(yōu)化計(jì)算的一個(gè)關(guān)鍵點(diǎn)。

    2) map階段:就是程序員編寫(xiě)好的map函數(shù)了,因此map函數(shù)效率相對(duì)好控制,而且一般map操作都是本地化操作也就是在數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上進(jìn)行;

    3) combiner階段:combiner階段是程序員可以選擇的,combiner其實(shí)也是一種reduce操作,因此我們看見(jiàn)WordCount類(lèi)里是用reduce進(jìn)行加載的。Combiner是一個(gè)本地化的reduce操作,它是map運(yùn)算的后續(xù)操作,主要是在map計(jì)算出中間文件前做一個(gè)簡(jiǎn)單的合并重復(fù)key值的操作,例如我們對(duì)文件里的單詞頻率做統(tǒng)計(jì),map計(jì)算時(shí)候如果碰到一個(gè)hadoop的單詞就會(huì)記錄為1,但是這篇文章里hadoop可能會(huì)出現(xiàn)n多次,那么map輸出文件冗余就會(huì)很多,因此在reduce計(jì)算前對(duì)相同的key做一個(gè)合并操作,那么文件會(huì)變小,這樣就提高了寬帶的傳輸效率,畢竟hadoop計(jì)算力寬帶資源往往是計(jì)算的瓶頸也是最為寶貴的資源,但是combiner操作是有風(fēng)險(xiǎn)的,使用它的原則是combiner的輸入不會(huì)影響到reduce計(jì)算的最終輸入,例如:如果計(jì)算只是求總數(shù),大值,最小值可以使用combiner,但是做平均值計(jì)算使用combiner的話(huà),最終的reduce計(jì)算結(jié)果就會(huì)出錯(cuò)。

    4) shuffle階段:將map的輸出作為reduce的輸入的過(guò)程就是shuffle了,這個(gè)是mapreduce優(yōu)化的重點(diǎn)地方。這里我不講怎么優(yōu)化shuffle階段,講講shuffle階段的原理,因?yàn)榇蟛糠值臅?shū)籍里都沒(méi)講清楚shuffle階段。Shuffle一開(kāi)始就是map階段做輸出操作,一般mapreduce計(jì)算的都是海量數(shù)據(jù),map輸出時(shí)候不可能把所有文件都放到內(nèi)存操作,因此map寫(xiě)入磁盤(pán)的過(guò)程十分的復(fù)雜,更何況map輸出時(shí)候要對(duì)結(jié)果進(jìn)行排序,內(nèi)存開(kāi)銷(xiāo)是很大的,map在做輸出時(shí)候會(huì)在內(nèi)存里開(kāi)啟一個(gè)環(huán)形內(nèi)存緩沖區(qū),這個(gè)緩沖區(qū)專(zhuān)門(mén)用來(lái)輸出的,默認(rèn)大小是100mb,并且在配置文件里為這個(gè)緩沖區(qū)設(shè)定了一個(gè)閥值,默認(rèn)是0.80(這個(gè)大小和閥值都是可以在配置文件里進(jìn)行配置的),同時(shí)map還會(huì)為輸出操作啟動(dòng)一個(gè)守護(hù)線(xiàn)程,如果緩沖區(qū)的內(nèi)存達(dá)到了閥值的80%時(shí)候,這個(gè)守護(hù)線(xiàn)程就會(huì)把內(nèi)容寫(xiě)到磁盤(pán)上,這個(gè)過(guò)程叫spill,另外的20%內(nèi)存可以繼續(xù)寫(xiě)入要寫(xiě)進(jìn)磁盤(pán)的數(shù)據(jù),寫(xiě)入磁盤(pán)和寫(xiě)入內(nèi)存操作是互不干擾的,如果緩存區(qū)被撐滿(mǎn)了,那么map就會(huì)阻塞寫(xiě)入內(nèi)存的操作,讓寫(xiě)入磁盤(pán)操作完成后再繼續(xù)執(zhí)行寫(xiě)入內(nèi)存操作,前面我講到寫(xiě)入磁盤(pán)前會(huì)有個(gè)排序操作,這個(gè)是在寫(xiě)入磁盤(pán)操作時(shí)候進(jìn)行,不是在寫(xiě)入內(nèi)存時(shí)候進(jìn)行的,如果我們定義了combiner函數(shù),那么排序前還會(huì)執(zhí)行combiner操作。每次spill操作也就是寫(xiě)入磁盤(pán)操作時(shí)候就會(huì)寫(xiě)一個(gè)溢出文件,也就是說(shuō)在做map輸出有幾次spill就會(huì)產(chǎn)生多少個(gè)溢出文件,等map輸出全部做完后,map會(huì)合并這些輸出文件。這個(gè)過(guò)程里還會(huì)有一個(gè)Partitioner操作,對(duì)于這個(gè)操作很多人都很迷糊,其實(shí)Partitioner操作和map階段的輸入分片(Input split)很像,一個(gè)Partitioner對(duì)應(yīng)一個(gè)reduce作業(yè),如果我們mapreduce操作只有一個(gè)reduce操作,那么Partitioner就只有一個(gè),如果我們有多個(gè)reduce操作,那么Partitioner對(duì)應(yīng)的就會(huì)有多個(gè),Partitioner因此就是reduce的輸入分片,這個(gè)程序員可以編程控制,主要是根據(jù)實(shí)際key和value的值,根據(jù)實(shí)際業(yè)務(wù)類(lèi)型或者為了更好的reduce負(fù)載均衡要求進(jìn)行,這是提高reduce效率的一個(gè)關(guān)鍵所在。到了reduce階段就是合并map輸出文件了,Partitioner會(huì)找到對(duì)應(yīng)的map輸出文件,然后進(jìn)行復(fù)制操作,復(fù)制操作時(shí)reduce會(huì)開(kāi)啟幾個(gè)復(fù)制線(xiàn)程,這些線(xiàn)程默認(rèn)個(gè)數(shù)是5個(gè),程序員也可以在配置文件更改復(fù)制線(xiàn)程的個(gè)數(shù),這個(gè)復(fù)制過(guò)程和map寫(xiě)入磁盤(pán)過(guò)程類(lèi)似,也有閥值和內(nèi)存大小,閥值一樣可以在配置文件里配置,而內(nèi)存大小是直接使用reduce的tasktracker的內(nèi)存大小,復(fù)制時(shí)候reduce還會(huì)進(jìn)行排序操作和合并文件操作,這些操作完了就會(huì)進(jìn)行reduce計(jì)算了。

    5) reduce階段:和map函數(shù)一樣也是程序員編寫(xiě)的,最終結(jié)果是存儲(chǔ)在hdfs上的。

    如圖所示:

Hadoop之MapReduce工作原理

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞標(biāo)題:Hadoop之MapReduce工作原理-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/hpdch.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部