專利名稱:一種Internet環(huán)境下MapReduce計算方法
技術(shù)領(lǐng)域:
本發(fā)明屬于分布式計算模型領(lǐng)域,具體涉及Internet環(huán)境下一種新的MapReduce計算方法及系統(tǒng),以及系統(tǒng)中的Map和Reduce任務(wù)調(diào)度方法。
背景技術(shù):
繼高性能集群計算、網(wǎng)格計算之后,在大規(guī)模計算領(lǐng)域,云計算正受到人們的強(qiáng)烈關(guān)注。作為云計算的核心技術(shù),MapReduce也受到了廣泛關(guān)注。MapReduce是Google在2004年提出來的一種處理大規(guī)模數(shù)據(jù)集的并行編程模型,以此來簡化分布式系統(tǒng)的編程。應(yīng)用程序編寫人員只需將精力放在應(yīng)用程序本身,而關(guān)于集群的處理問題,包括可靠性、可擴(kuò)展性、任務(wù)并行化、數(shù)據(jù)分布存儲、負(fù)載均衡、節(jié)點(diǎn)通信等復(fù)雜過程被屏蔽,用戶不需要關(guān)心如何將輸入的數(shù)據(jù)分塊,分配和調(diào)度。這使得那些沒有多少并行計算經(jīng)驗的程序員也可以開發(fā)并行應(yīng)用來處理和分析海量數(shù)據(jù)。MapReduce系統(tǒng)通過Map (映射)和Reduce (化簡)這樣兩個簡單的概念來構(gòu)成運(yùn)算基本單元。用戶只需編寫Map函數(shù)和Reduce函數(shù)即可實(shí)現(xiàn)對大規(guī)模海量數(shù)據(jù)集的并行處理。MapReduce系統(tǒng)可以根據(jù)輸入數(shù)據(jù)的大小及作業(yè)的配置等信息,自動將該作業(yè)初始化為多個相同的Map任務(wù)和Reduce任務(wù),分別讀取不同的輸入數(shù)據(jù)塊并調(diào)用Map函數(shù)和Reduce函數(shù)進(jìn)行處理。在Map函數(shù)中指定對各分塊數(shù)據(jù)的處理過程,在Reduce函數(shù)中指定如何對分塊數(shù)據(jù)處理的中間結(jié)果進(jìn)行化簡。映射-化簡過程如下:
映射(Map)過程: Map (keyl, valuel)----> list (key2, value2)
化簡(Reduce)過程:Reduce (key2, list (value2))----> list (value3)` 此外,在Reduce過程之前,一般還包括排序(Sort)過程和合并(Merge)過程。如圖1所示,在Map階段,Map任務(wù)讀取一個輸入(keyl, value I)對,由程序員定義的Map函數(shù)對其處理產(chǎn)生一個中間(key2, value2)結(jié)果集,并保存在本地。在Reduce階段,Reduce任務(wù)從所有執(zhí)行Map任務(wù)的節(jié)點(diǎn)讀取中間關(guān)鍵字key2和相關(guān)的一個value2集,由程序員定義的Reduce函數(shù)對其進(jìn)行處理,并得到計算結(jié)果。在現(xiàn)有技術(shù)中,MapReduce系統(tǒng)通常和分布式文件系統(tǒng)相耦合,如Yahoo提出的Hadoop是一種基于Java的MapReduce開源實(shí)現(xiàn),實(shí)現(xiàn)了一個分布式文件系統(tǒng)HDFS(HadoopDistributed File System)和MapReduce任務(wù)調(diào)度框架,大數(shù)據(jù)經(jīng)過分片,存儲在由工作節(jié)點(diǎn)(Worker)所組成的分布式文件系統(tǒng)中。Hadoop通常部署在高可靠集群環(huán)境下,用戶通過Master提交作業(yè);Master進(jìn)行任務(wù)調(diào)度,同時接收Worker的狀態(tài)匯報;Worker執(zhí)行Map任務(wù)或Reduce任務(wù);Map任務(wù)從分布式文件系統(tǒng)讀數(shù)據(jù)分片,執(zhí)行任務(wù),最后在本地寫中間結(jié)果;RedUCe任務(wù)讀Map輸出的中間結(jié)果,執(zhí)行任務(wù),最后在分布式文件系統(tǒng)上寫輸出數(shù)據(jù)。另一方面,自上世紀(jì)九十年代以來,人們目睹了志愿計算的強(qiáng)大計算能力。目前,志愿計算也吸引了越來越多的關(guān)注。志愿計算是通過互聯(lián)網(wǎng)讓全球的普通大眾自愿捐獻(xiàn)個人PC空閑的CPU周期,參與科學(xué)計算或數(shù)據(jù)分析的一種計算方式,實(shí)現(xiàn)分散的志愿資源的集成。這種方式為解決基礎(chǔ)科學(xué)運(yùn)算規(guī)模較大、計算資源需求較多的難題提供了一種行之有效的解決途徑。它將許多單獨(dú)的計算機(jī)連接在一起,從而建立一個具有海量計算能力的大系統(tǒng),這種系統(tǒng)遠(yuǎn)遠(yuǎn)超過幾臺超級計算機(jī)的能力。在生物信息學(xué)、高能物理、氣候預(yù)測等多個領(lǐng)域已開始使用這一模式來解決大規(guī)模的科學(xué)計算問題。最著名的BOINC (伯克利開放網(wǎng)絡(luò)計算平臺)提供了一個志愿計算運(yùn)行環(huán)境。目前全球最大的志愿計算項目SETIOhome就運(yùn)行在BOINC平臺上。該項目注冊用戶達(dá)200多萬,活躍用戶有20多萬,24小時的平均吞吐量達(dá)到了驚人的7 PetaFLOPS0此外知名的志愿計算項目還包括 FOLDINGOhome、LHCihome、Einsteinihome、IBM WorldCommunity Grid、ClimatePrediction.net 等。志愿計算的主要工作原理是:提交上來的計算任務(wù)被分成若干可以同時處理的小任務(wù),并分配到Internet中志愿者的個人PC上執(zhí)行。當(dāng)志愿者向服務(wù)器請求任務(wù),服務(wù)器給志愿者分配一個任務(wù),待志愿者的任務(wù)完成,將計算結(jié)果返回至專門的存儲系統(tǒng),然后請求服務(wù)器再分配一個新的任務(wù)。它的主要特點(diǎn)是,志愿節(jié)點(diǎn)容易離線而導(dǎo)致失效,這就要求志愿計算系統(tǒng)要解決容錯這一問題。最適合志愿計算的應(yīng)用場景是對時間不敏感的,如蒙特卡羅模擬、參數(shù)掃描、BoT任務(wù)(即Bag-of-Tasks,指任務(wù)數(shù)量巨大,互相之間獨(dú)立,且每個任務(wù)的運(yùn)算量和對內(nèi)存及外部存儲的要求適中的任務(wù))。其他類型的應(yīng)用也可在志愿計算平臺運(yùn)行,但是效率不高,且需解決任務(wù)分割等難題。通常,針對物理、化學(xué)、生物等行業(yè)的志愿計算項目服務(wù)器端程序通常需要由專業(yè)人士來進(jìn)行開發(fā),且開發(fā)難度較大。這就決定了志愿計算模式的應(yīng)用范圍有限,并不是所有應(yīng)用都可以在志愿計算平臺上運(yùn)行。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種新的Internet環(huán)境下的MapReduce計算方法,具有簡單、實(shí)用、有效的特點(diǎn),用以解決在動態(tài)易失效的Internet節(jié)點(diǎn)上運(yùn)行可靠的MapReduce作業(yè)這一難題。若與志愿計算系統(tǒng)相結(jié)合,從而能夠擴(kuò)大志愿計算模式的應(yīng)用范圍,實(shí)現(xiàn)在志愿計算平臺上運(yùn)行可靠的MapReduce作業(yè)。采用本發(fā)明可以充分利用Internet環(huán)境下空閑的桌面PC資源,用MapReduce并行計算方法來進(jìn)行數(shù)據(jù)處理,借鑒于現(xiàn)有的高可靠集群環(huán)境下的MapReduce技術(shù),對用戶而言,本發(fā)明提供的方法同樣屏蔽任務(wù)分配、節(jié)點(diǎn)通信、節(jié)點(diǎn)容錯等復(fù)雜過程,提供簡單的編程方法來開發(fā)應(yīng)用。如圖2所示,本發(fā)明采用的架構(gòu)包含三種不同的節(jié)點(diǎn):第一是服務(wù)器,包含數(shù)據(jù)存儲服務(wù)器、元數(shù)據(jù)服務(wù)器、數(shù)據(jù)調(diào)度器、MR任務(wù)調(diào)度器這四個不同的服務(wù)組件;第二是客戶端(用戶),也稱之為Master節(jié)點(diǎn);第三是眾多的工作節(jié)點(diǎn),以志愿者的形式加入系統(tǒng),也稱之為Worker節(jié)點(diǎn)。與現(xiàn)有的MapReduce系統(tǒng)不同的是,本發(fā)明實(shí)施例不依賴于分布式文件系統(tǒng),而依賴于自己的元數(shù)據(jù)管理系統(tǒng)和數(shù)據(jù)存儲服務(wù)器。在本發(fā)明實(shí)施例中,系統(tǒng)的主要工作原理如下:
第一步,客戶端作為Master節(jié)點(diǎn)向數(shù)據(jù)存儲服務(wù)器(如HTTP、FTP等服務(wù)器)上傳待分析處理的大數(shù)據(jù);
第二步,客戶端提交任務(wù),指定對已存儲于數(shù)據(jù)存儲服務(wù)器中的大數(shù)據(jù)進(jìn)行Map和Reduce 處理;
第三步,經(jīng)過數(shù)據(jù)調(diào)度器和MR調(diào)度器,將Map任務(wù)和Reduce任務(wù)分配至工作節(jié)點(diǎn)上執(zhí)行;
第四步,工作節(jié)點(diǎn)定期以“心跳信號”的方式向MR任務(wù)調(diào)度器匯報任務(wù)執(zhí)行狀態(tài); 第五步,待所有任務(wù)完成,最終結(jié)果自動返回至客戶端。本發(fā)明實(shí)施例所采用的主要技術(shù)方案包括:
(1)在元數(shù)據(jù)管理基礎(chǔ)之上,采用基于元數(shù)據(jù)的“拉模式”數(shù)據(jù)調(diào)度方法,根據(jù)數(shù)據(jù)屬性將數(shù)據(jù)調(diào)度至工作節(jié)點(diǎn);
(2)利用數(shù)據(jù)驅(qū)動的方式,將任務(wù)分配與調(diào)度轉(zhuǎn)化為數(shù)據(jù)調(diào)度,將Map任務(wù)和Reduce任務(wù)的容錯轉(zhuǎn)化為Map輸入數(shù)據(jù)、中間結(jié)果和Reduce輸入數(shù)據(jù)的容錯;
(3)利用數(shù)據(jù)依賴性,來合理控制Map任務(wù)得到的中間結(jié)果的數(shù)據(jù)流向;
(4)工作節(jié)點(diǎn)可啟動多線程同時執(zhí)行Map任務(wù)和Reduce任務(wù);
(5)工作節(jié)點(diǎn)采用“心跳信號”的方式向服務(wù)器匯報本地存儲的數(shù)據(jù)和任務(wù)執(zhí)行狀態(tài),服務(wù)器自動檢測出慢節(jié)點(diǎn)和慢任務(wù),并進(jìn)行任務(wù)重調(diào)度。本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)無需干預(yù),最終結(jié)果自動返回給用戶;能夠?qū)崿F(xiàn)大規(guī)模可擴(kuò)展性系統(tǒng),在節(jié)點(diǎn)數(shù)量上能容納10萬級別的工作節(jié)點(diǎn)。本發(fā)明解決了 Internet環(huán)境下網(wǎng)絡(luò)地址轉(zhuǎn)換和防火墻等帶來的影響,解決了節(jié)點(diǎn)的異構(gòu)性以及節(jié)點(diǎn)的動態(tài)易失效帶來的影響,提供了 Internet環(huán)境下一種簡單有效的容錯MapReduce計算模型與方法。采用本發(fā)明,可在校園、企業(yè)、政府內(nèi)利用現(xiàn)有桌面PC構(gòu)建以私有為目的的MapReduce計算平臺來進(jìn)行海量數(shù)據(jù)分析,或用于改進(jìn)志愿計算系統(tǒng)來支持MapReduce計算模型,降低志愿計算系統(tǒng)應(yīng)用開發(fā)的難度。
圖1為現(xiàn)有技術(shù)中MapReduce系統(tǒng)的總體原理圖。圖2為本發(fā)明提供的在Internet環(huán)境下的MapReduce計算系統(tǒng)組成結(jié)構(gòu)圖。圖3為本發(fā)明實(shí)施例中工作節(jié)點(diǎn)多線程處理原理圖。圖4為本發(fā)明實(shí)施例Ping-Pong測試結(jié)果。圖5為本發(fā)明實(shí)施例廣播與Scatter/Gather測試結(jié)果。圖6為本發(fā)明實(shí)施例的可擴(kuò)展性測試結(jié)果。圖7為本發(fā)明實(shí)施例在慢任務(wù)檢測和多任務(wù)副本情況下的性能測試結(jié)果。圖8為本發(fā)明實(shí)施例對節(jié)點(diǎn)容錯的案例分析。
具體實(shí)施例方式本發(fā)明實(shí)施例提供了一種利用Internet環(huán)境下的桌面PC進(jìn)行MapReduce計算的方法、系統(tǒng)。下面結(jié)合說明書附圖對本發(fā)明實(shí)施例進(jìn)行詳細(xì)說明。如圖2所示,Internet環(huán)境下MapReduce系統(tǒng)主要包括如下三種不同類型的節(jié)點(diǎn)。(I)客戶端(Master):將用戶編寫的并行處理作業(yè)提交至服務(wù)節(jié)點(diǎn),通過服務(wù)節(jié)點(diǎn)監(jiān)控作業(yè)狀態(tài),自動獲取最終執(zhí)行結(jié)果。(2)服務(wù)節(jié)點(diǎn)(服務(wù)器):管理所有的工作節(jié)點(diǎn),并自動將用戶作業(yè)分解為Map任務(wù)和Reduce任務(wù),將任務(wù)調(diào)度到工作節(jié)點(diǎn)執(zhí)行。具體包括四個服務(wù)組件:
①元數(shù)據(jù)服務(wù)器:管理和存儲元數(shù)據(jù); ②數(shù)據(jù)存儲服務(wù)器:即HTTP、FTP服務(wù)器,或者BitTorrent協(xié)議的Tracker,或者是采用其他新型傳輸協(xié)議的存儲服務(wù)器;
③數(shù)據(jù)調(diào)度器:接收工作節(jié)點(diǎn)的周期性“心跳信號”,對元數(shù)據(jù)進(jìn)行解析,根據(jù)提取出數(shù)據(jù)屬性,進(jìn)行數(shù)據(jù)的分發(fā)與傳輸控制;
④MR任務(wù)調(diào)度器:接收工作節(jié)點(diǎn)的周期性“心跳信號”,對各工作節(jié)點(diǎn)的Map任務(wù)和Reduce任務(wù)進(jìn)行調(diào)度和監(jiān)控,檢測出慢節(jié)點(diǎn)和慢任務(wù)。(3)工作節(jié)點(diǎn)(Worker):主動向服務(wù)節(jié)點(diǎn)請求執(zhí)行任務(wù),向服務(wù)節(jié)點(diǎn)發(fā)送周期性“心跳信號”,同時工作節(jié)點(diǎn)接收并存儲MapReduce的輸入/輸出數(shù)據(jù)。本發(fā)明實(shí)施例采用多維度對系統(tǒng)中的所有數(shù)據(jù)進(jìn)行描述,稱之為數(shù)據(jù)屬性。數(shù)據(jù)屬性分為兩大類:
(1)第一類是常規(guī)屬性,主要包括:①創(chuàng)建時間;②修改時間所有者;④數(shù)據(jù)大??;⑤數(shù)據(jù)類型備注信息等等;
(2)第二類是與數(shù)據(jù)調(diào)度相關(guān)的屬性,主要包括:①副本數(shù)目,定義了該數(shù)據(jù)在系統(tǒng)中的副本數(shù);②容錯標(biāo)志,定義了是否需要對該數(shù)據(jù)進(jìn)行容錯;③生命周期,定義了該數(shù)據(jù)存在于系統(tǒng)中的生命周期;④依賴關(guān)系,定義了數(shù)據(jù)之間的依賴關(guān)系,具有依賴關(guān)系的兩個數(shù)據(jù)將被存儲在同一節(jié)點(diǎn)上;⑤傳輸協(xié)議,定義了傳輸該數(shù)據(jù)時允許采用的傳輸協(xié)議。這些針對數(shù)據(jù)的描述作為元數(shù)據(jù)存儲在元數(shù)據(jù)服務(wù)器。在本發(fā)明實(shí)施例中,采用了內(nèi)存數(shù)據(jù)庫來存儲元數(shù)據(jù)。在數(shù)據(jù)屬性中,如果有“數(shù)據(jù)A.依賴性一數(shù)據(jù)B”,這意味著數(shù)據(jù)A將會被調(diào)度至數(shù)據(jù)B存儲的位置(工作節(jié)點(diǎn)),最終數(shù)據(jù)A和數(shù)據(jù)B將會存儲在同一工作節(jié)點(diǎn)上。如果有“容錯標(biāo)志=true”,這即意味著該數(shù)據(jù)需要容錯,當(dāng)存儲該數(shù)據(jù)的工作節(jié)點(diǎn)發(fā)生失效錯誤或失去聯(lián)系時,服務(wù)器將通知另一個工作節(jié)點(diǎn)創(chuàng)建一個新副本來代替丟失的副本。本發(fā)明實(shí)施例中,數(shù)據(jù)調(diào)度器專門負(fù)責(zé)數(shù)據(jù)調(diào)度。實(shí)施例采用了基于元數(shù)據(jù)的“拉模式”數(shù)據(jù)調(diào)度,拋棄了傳統(tǒng)的“推模式”,因為“拉模式”能夠突破Internet環(huán)境下網(wǎng)絡(luò)地址轉(zhuǎn)換和防火墻的限制。在“拉模式”下,工作節(jié)點(diǎn)處于主動地位,服務(wù)器處于被動地位。工作節(jié)點(diǎn)主動發(fā)起通信過程,服務(wù)器被動響應(yīng)。工作節(jié)點(diǎn)利用周期性的“心跳信號”向數(shù)據(jù)調(diào)度器匯報當(dāng)前存儲在本地的數(shù)據(jù)。作為“心跳信號”的響應(yīng),數(shù)據(jù)調(diào)度器與節(jié)點(diǎn)有一個數(shù)據(jù)同步操作,數(shù)據(jù)調(diào)度器掃描系統(tǒng)中所有數(shù)據(jù)的屬性,通知節(jié)點(diǎn)是否需要下載數(shù)據(jù)至本地(由于有新數(shù)據(jù)到來或有節(jié)點(diǎn)失效導(dǎo)致副本丟失)或者刪除已存在于本地的數(shù)據(jù)(由于該數(shù)據(jù)生命周期已結(jié)束),將數(shù)據(jù)同步與數(shù)據(jù)調(diào)度相耦合。本發(fā)明實(shí)施例采用{副本數(shù)目,容錯標(biāo)志,生命周期,依賴關(guān)系,傳輸協(xié)議}五元組的數(shù)據(jù)屬性值,來實(shí)現(xiàn)各種數(shù)據(jù)調(diào)度控制,簡單而且非常靈活。在本發(fā)明實(shí)施例中,利用數(shù)據(jù)依賴關(guān)系,來實(shí)現(xiàn)合理控制Map任務(wù)得到的中間結(jié)果的數(shù)據(jù)流向,準(zhǔn)確傳輸至執(zhí)行Reduce任務(wù)的工作節(jié)點(diǎn),利用數(shù)據(jù)容錯標(biāo)志,實(shí)現(xiàn)任務(wù)的容錯。下面詳細(xì)地描述本發(fā)明實(shí)施例中MapReduce的作業(yè)執(zhí)行流程及任務(wù)調(diào)度方法。首先,系統(tǒng)初始化。步驟1:服務(wù)節(jié)點(diǎn)的四個組件全部啟動,并創(chuàng)建一個特殊數(shù)據(jù)稱之為MapperToken,其數(shù)據(jù)屬性設(shè)置為MapperTokenAttr= { “副本數(shù)目”=無窮大}。步驟2:各工作節(jié)點(diǎn)啟動程序,連接服務(wù)器,從而加入系統(tǒng)并分配一個節(jié)點(diǎn)ID,工作節(jié)點(diǎn)從元數(shù)據(jù)管理器中查找并下載特殊數(shù)據(jù)MapperToken,將其存儲在本地,以此來標(biāo)明此節(jié)點(diǎn)可以執(zhí)行Map任務(wù),啟動相應(yīng)的MapTask工作線程。其次,用戶Master上傳數(shù)據(jù)。步驟3:用戶上傳一個大數(shù)據(jù),指定數(shù)據(jù)分塊的大小并對其進(jìn)行數(shù)據(jù)分塊處理,創(chuàng)建一個數(shù)據(jù)集合DataCollection DC= {dl, d2,…,dn},并為每個數(shù)據(jù)塊設(shè)置相同的數(shù)據(jù)屬性 MapInputAttr= { “副本數(shù)目 ”=r, “容錯標(biāo)志”=true, “依賴關(guān)系” =MapperToken}。然后,用戶Master提交MapReduce作業(yè)。步驟4:用戶指定Map任務(wù)得到的中間結(jié)果的分區(qū)數(shù)目R,及分區(qū)的規(guī)則。步驟5:創(chuàng)建R個特殊數(shù)據(jù),每個數(shù)據(jù)稱為ReducerTokenX,將每一個的屬性設(shè)為ReducerTokenAttrX= { “副本數(shù)目 ”=1,“容錯標(biāo)志” =true},其中 X=I, 2,, R0步驟6:所有ReducerTokenX經(jīng)過數(shù)據(jù)服務(wù)器調(diào)度,最終由R個工作節(jié)點(diǎn)接收并存儲在本地,以此來標(biāo)明此節(jié)點(diǎn)是Reducer,它被選中即將執(zhí)行Reduce任務(wù),啟動相應(yīng)的ReduceTask工作線程。步驟7:創(chuàng)建一個特殊數(shù)據(jù)CollectorToken,屬性設(shè)為TokenCollector= { “副本數(shù)目” =1},它被存儲在Master本地。步驟8:正式提交作業(yè),指定該作業(yè)分析處理DataCollection DC={dl,d2,…,dn},調(diào)度所有數(shù)據(jù)塊dl, d2,...,dn。然后,Map任務(wù)執(zhí)行。步驟9:當(dāng) 工作節(jié)點(diǎn)接收到數(shù)據(jù)塊,將其放入數(shù)據(jù)隊列,計算產(chǎn)生中間結(jié)果list (k, v)。然后,中間結(jié)果的“洗牌”。步驟10:工作節(jié)點(diǎn)對中間結(jié)果進(jìn)行分區(qū),獲取Reducer的數(shù)目R,跟keyX相關(guān)的中間結(jié)果重組為數(shù)據(jù)irX,將其作為Reduce任務(wù)的輸入數(shù)據(jù),數(shù)據(jù)屬性分別設(shè)為ReduceInputAttrX= { “副本數(shù)目 ”=r, “容錯標(biāo)志”=true, “依賴關(guān)系” =ReducerTokenX},數(shù)據(jù)調(diào)度器將它們調(diào)度至正確的Reducer來進(jìn)行下一步處理,其中X=l,2,…,R。最后,Reduce任務(wù)的執(zhí)行。步驟11:當(dāng)Reducer接收到irX,將其放入數(shù)據(jù)隊列,計算產(chǎn)生結(jié)果。步驟12:當(dāng)隊列中所有的數(shù)據(jù)都已處理,Reducer將結(jié)果組合成單個文件OutX。步驟13:設(shè)置最終結(jié)果OutX的屬性O(shè)utAttr= {“依賴關(guān)系”=TokenCollector},最終結(jié)果經(jīng)過調(diào)度被自動送回到Master。如圖3所示,本發(fā)明實(shí)施例中,采用多線程的方法,每個工作節(jié)點(diǎn)可以同時執(zhí)行Map任務(wù)和Reduce任務(wù)。每個工作節(jié)點(diǎn)采用多線程的方式,啟動三個線程即Mapper、Reducer和ReducerPutter,同時維護(hù)三個數(shù)據(jù)隊列Q1、Q2和Q3。其中,Ql存儲Map輸入數(shù)據(jù),Q2存儲Reduce輸入數(shù)據(jù)(中間結(jié)果“洗牌”后),Q3存儲待傳輸至別的節(jié)點(diǎn)執(zhí)行Reduce任務(wù)的中間結(jié)果。如果某工作節(jié)點(diǎn)擁有ReducerTokenX,意味著該節(jié)點(diǎn)被選中執(zhí)行Reduce任務(wù)去化簡跟keyX相關(guān)的中間結(jié)果,該節(jié)點(diǎn)Map任務(wù)的輸出結(jié)果中跟keyX相關(guān)的直接進(jìn)入隊列Q2,其他的進(jìn)入隊列Q3,等待調(diào)度至別的擁有ReducerToken的工作節(jié)點(diǎn)。如果某工作節(jié)點(diǎn)沒有擁有任何ReducerToken,則Map任務(wù)的輸出結(jié)果經(jīng)分區(qū)后都進(jìn)入隊列Q3。本發(fā)明實(shí)施例采用Java語言編寫,節(jié)點(diǎn)間的通信方式利用Java RMI (遠(yuǎn)程方法調(diào)用)來實(shí)現(xiàn)。為了驗證本發(fā)明的可行性和有效性,本實(shí)施例在多臺桌面PC的環(huán)境下進(jìn)行了部署,并進(jìn)行了性能比較測試。如圖4所示,為實(shí)施例的Ping-Pong測試結(jié)果,該測試主要驗證數(shù)據(jù)分塊與數(shù)據(jù)傳輸性能。在該測試中,使用了局域網(wǎng)內(nèi)2臺服務(wù)器、I個Master (客戶端)節(jié)點(diǎn)和I個Worker (工作)節(jié)點(diǎn)。Master節(jié)點(diǎn)執(zhí)行ping程序,Worker節(jié)點(diǎn)執(zhí)行pong程序。針對大小為2741MB的單個大文件,采用不同的數(shù)據(jù)分塊大小,客戶端上傳數(shù)據(jù)至數(shù)據(jù)服務(wù)器(ping階段),經(jīng)過數(shù)據(jù)調(diào)度器調(diào)度,數(shù)據(jù)經(jīng)過分塊、創(chuàng)建、上傳、下載、合并五個子過程,采用的數(shù)據(jù)傳輸協(xié)議是FTP,最終數(shù)據(jù)準(zhǔn)確傳輸至工作節(jié)點(diǎn)(pong階段)。測試結(jié)果表明,當(dāng)數(shù)據(jù)分塊的大小在32MB和80MB之間時,數(shù)據(jù)在兩個節(jié)點(diǎn)間ping-pong傳輸?shù)臅r間最短,這跟目前現(xiàn)有的MapReduce技術(shù)得出的結(jié)論類似,在實(shí)際使用時,數(shù)據(jù)分塊的大小不能過小,也不能過大,一般選擇64MB比較合適。如圖5所示,在該實(shí)施例的廣播測試中,采用的數(shù)據(jù)傳輸協(xié)議為BitTorrent和FTP,數(shù)據(jù)分塊的大小設(shè)為48MB,客戶端上傳數(shù)據(jù)至服務(wù)器,經(jīng)過數(shù)據(jù)調(diào)度器調(diào)度,所有數(shù)據(jù)分塊傳輸至各工作節(jié)點(diǎn),實(shí)現(xiàn)“廣播”的效果。圖5中給出了隨著工作節(jié)點(diǎn)數(shù)的變化時廣播的時間開銷,采用FTP協(xié)議時,由于節(jié)點(diǎn)間競爭網(wǎng)絡(luò)帶寬,廣播時間幾乎成線性增長;采用BitTorrent協(xié)議時,廣播時間增長較為緩慢,比采用FTP協(xié)議時性能更優(yōu)。同時,在圖5中還給出了實(shí)施例的Scatter/Gather測試結(jié)果,在這個測試中,數(shù)據(jù)分塊的大小設(shè)為16MB,采用的數(shù)據(jù)傳輸協(xié)議為FTP。(I) Scatter測試:客戶端上傳數(shù)據(jù)至數(shù)據(jù)服務(wù)器,經(jīng)過數(shù)據(jù)調(diào)度器調(diào)度,所有數(shù)據(jù)分塊傳輸至工作節(jié)點(diǎn),實(shí)現(xiàn)“Scatter”的效果;(2)Gather測試■ 另一客戶端請求獲取所有分塊,經(jīng)過數(shù)據(jù)調(diào)度器調(diào)度,最終獲取所有的分塊,各分塊來自于不同的工作節(jié)點(diǎn),實(shí)現(xiàn)“Gather”的效果。從圖中可以看出,隨著工作節(jié)點(diǎn)數(shù)增加,Scatter/Gather的時間并未顯著增加,因為每個節(jié)點(diǎn)只傳輸部分?jǐn)?shù)據(jù)塊,因此網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)總量基本保持不變。如圖6所示,為實(shí)施例的可擴(kuò)展性測試結(jié)果。該測試?yán)昧宋挥诰钟蚓W(wǎng)內(nèi)的512臺空閑的桌面PC,運(yùn)行了經(jīng)典的WordCount測試應(yīng)用。該應(yīng)用統(tǒng)計了在大型文本文檔(在本測試中總大小為20 GB,數(shù)據(jù)分塊的大小為100MB)中單詞出現(xiàn)的頻次,并按照字母順序?qū)卧~進(jìn)行排序。在該測試中,記錄任務(wù)的完成時間,計算出WordCount處理的吞吐量(MB/s)的大小。測試結(jié)果證明,當(dāng)所使用的工作節(jié)點(diǎn)數(shù)目增大的時候,吞吐量明顯增大。本發(fā)明的實(shí)施例具有較好的加速比,隨著節(jié)點(diǎn)數(shù)目增大的可擴(kuò)展性能較好。如圖7所示,為實(shí)施例的慢節(jié)點(diǎn)檢測和多任務(wù)副本情況下的性能測試結(jié)果。在該測試中,使用的工作節(jié)點(diǎn)的總數(shù)目是200個,使用工具對部分工作節(jié)點(diǎn)進(jìn)行CPU降速從而將其變成慢節(jié)點(diǎn),并人為引入干擾,將任務(wù)掛起,使得任務(wù)成為慢任務(wù)。圖中給出了當(dāng)沒有慢節(jié)點(diǎn)時,任務(wù)完成的參考時間約為25秒,隨著工作節(jié)點(diǎn)中慢節(jié)點(diǎn)所占比例增大,若配置較大的副本數(shù),明顯可以降低任務(wù)的完成時間。在實(shí)施例中,將任務(wù)副本轉(zhuǎn)化為數(shù)據(jù)副本,工作節(jié)點(diǎn)用周期性的“心跳信號”匯報任務(wù)的執(zhí)行狀態(tài),通過獲取工作節(jié)點(diǎn)的任務(wù)執(zhí)行狀態(tài),從中檢測并發(fā)現(xiàn)慢任務(wù),刪除副本并重調(diào)度,從而提高任務(wù)的完成時間,方法非常有效。下面結(jié)合圖8 來說明本發(fā)明提出的Internet環(huán)境下MapReduce計算方法中節(jié)點(diǎn)容錯的處理。在該案例分析中,總共利用5個工作節(jié)點(diǎn),用戶上傳的待分析處理的大數(shù)據(jù)被分成5塊,記為D (cl)、D (c2)、D (c3)、D (c4)、D (c5),每個節(jié)點(diǎn)均擁有MapperToken將執(zhí)行Map任務(wù),節(jié)點(diǎn)I和節(jié)點(diǎn)2還擁有ReducerToken將執(zhí)行Reduce任務(wù)。人為引入三個工作節(jié)點(diǎn)失效或錯誤:節(jié)點(diǎn)4在Map輸入數(shù)據(jù)下載階段發(fā)生錯誤(F1)、節(jié)點(diǎn)3在Map任務(wù)執(zhí)行階段發(fā)生錯誤(F2)、節(jié)點(diǎn)I在Reduce任務(wù)執(zhí)行階段發(fā)生錯誤(F3)。針對錯誤Fl,數(shù)據(jù)D (c4)被重新調(diào)度至節(jié)點(diǎn)2,并在節(jié)點(diǎn)2啟動Map任務(wù)M(c4)。針對錯誤F2,數(shù)據(jù)D (c3)被重新調(diào)度至節(jié)點(diǎn)5,并在節(jié)點(diǎn)5重新啟動Map任務(wù)M(c3)。節(jié)點(diǎn)5在對數(shù)據(jù)D(c5)進(jìn)行Map處理后,產(chǎn)生的中間結(jié)果經(jīng)過分區(qū)得到U(i1:5)和U(i2,5),經(jīng)過調(diào)度,分別被傳輸至節(jié)點(diǎn)I和節(jié)點(diǎn)
2。當(dāng)節(jié)點(diǎn)I發(fā)生錯誤F3時,節(jié)點(diǎn)I的所有數(shù)據(jù)都丟失,均被重新調(diào)度至節(jié)點(diǎn)5,節(jié)點(diǎn)5獲得ReducerToken,執(zhí)行Reduce任務(wù),同時D (cl)也被重新調(diào)度至節(jié)點(diǎn)5,重新啟動Map任務(wù)M(Cl)。最終節(jié)點(diǎn)2和節(jié)點(diǎn)5完成所有Reduce任務(wù),返回最終結(jié)果。
權(quán)利要求
1.一種Internet環(huán)境下的MapReduce計算方法,其特征在于,利用Internet環(huán)境下志愿者桌面PC的空閑計算和存儲資源來進(jìn)行MapReduce計算,提供一種Internet環(huán)境下簡單有效的容錯MapReduce計算模型與方法,使得志愿計算系統(tǒng)能夠支持MapReduce計算。
2.根據(jù)權(quán)利要求1所述的Internet環(huán)境下的MapReduce計算方法,其特征在于,Internet環(huán)境下的MapReduce計算系統(tǒng)架構(gòu)包含三種不同類型的節(jié)點(diǎn):第一是服務(wù)器,包含數(shù)據(jù)存儲服務(wù)器、元數(shù)據(jù)服務(wù)器、數(shù)據(jù)調(diào)度器、MR任務(wù)調(diào)度器這四個不同的服務(wù)組件;第二是客戶端(用戶),也稱之為Master節(jié)點(diǎn);第三是眾多的工作節(jié)點(diǎn),也稱之為Worker節(jié)點(diǎn)。
3.根據(jù)權(quán)利要求1所述的Internet環(huán)境下的MapReduce計算方法,其特征在于,它不依賴于傳統(tǒng)的分布式文件系統(tǒng),而依賴于自己的元數(shù)據(jù)管理系統(tǒng)和數(shù)據(jù)存儲服務(wù)器。
4.根據(jù)權(quán)利要求2所述的Internet環(huán)境下的MapReduce計算方法,其特征在于,桌面PC以志愿者的形式加入系統(tǒng)成為工作節(jié)點(diǎn),用戶作為Master向服務(wù)器上傳待處理的數(shù)據(jù),并提交MapReduce任務(wù),服務(wù)器自動將Map任務(wù)和Reduce任務(wù)調(diào)度至工作節(jié)點(diǎn)上執(zhí)行,待所有任務(wù)完成,Reduce任務(wù)的最終結(jié)果自動返回給用戶,無需人工干預(yù)。
5.根據(jù)權(quán)利要求4所述的Internet環(huán)境下的MapReduce計算方法,其特征在于,在元數(shù)據(jù)管理基礎(chǔ)之上,利用數(shù)據(jù)驅(qū)動的方式,將任務(wù)分配與調(diào)度轉(zhuǎn)化為數(shù)據(jù)調(diào)度,將Map任務(wù)和Reduce任務(wù)的容錯轉(zhuǎn)化為Map輸入數(shù)據(jù)、中間結(jié)果和Reduce輸入數(shù)據(jù)的容錯,解決了Internet環(huán)境下工作節(jié)點(diǎn)動態(tài)易失效帶來的影響。
6.根據(jù)權(quán)利要求4所述的Internet環(huán)境下的MapReduce計算方法,其特征在于,采用{副本數(shù)目,容錯標(biāo)志,生命周期,依賴關(guān)系,傳輸協(xié)議}五元組的數(shù)據(jù)屬性值,來實(shí)現(xiàn)各種數(shù)據(jù)調(diào)度控制;利用數(shù)據(jù)容錯標(biāo)志,實(shí)現(xiàn)任務(wù)的容錯;利用數(shù)據(jù)依賴關(guān)系,來實(shí)現(xiàn)合理控制Map任務(wù)得到的中間結(jié)果的數(shù)據(jù)流向,準(zhǔn)確傳輸至執(zhí)行Reduce任務(wù)的工作節(jié)點(diǎn)。
7.根據(jù)權(quán)利要求4所述的Internet環(huán)境下的MapReduce計算方法,其特征在于,采用了基于元數(shù)據(jù)的“拉模式”數(shù)據(jù)調(diào)度,突破Internet環(huán)境下網(wǎng)絡(luò)地址轉(zhuǎn)換和防火墻的限制;在“拉模式”下,工作節(jié)點(diǎn)主動發(fā)起通信過程,服務(wù)器被動響應(yīng);工作節(jié)點(diǎn)利用周期性的“心跳信號”向數(shù)據(jù)調(diào)度器匯報當(dāng)前存儲在本地的數(shù)據(jù);作為“心跳信號的”響應(yīng),數(shù)據(jù)調(diào)度器與節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步操作,數(shù)據(jù)調(diào)度器掃描系統(tǒng)中所有數(shù)據(jù)的屬性,通知節(jié)點(diǎn)是否需要下載數(shù)據(jù)至本地或者刪除已存在于本地的數(shù)據(jù),將數(shù)據(jù)同步與數(shù)據(jù)調(diào)度相耦合。
全文摘要
本發(fā)明公開了一種Internet環(huán)境下MapReduce計算方法。該方法利用Internet桌面PC的空閑計算和存儲資源來進(jìn)行MapReduce計算。桌面PC以志愿者的形式加入系統(tǒng)成為工作節(jié)點(diǎn),用戶作為Master向服務(wù)器上傳待處理的數(shù)據(jù),服務(wù)器將Map和Reduce任務(wù)調(diào)度至工作節(jié)點(diǎn)上執(zhí)行,待所有任務(wù)完成,最終結(jié)果自動返回給用戶。該方法在元數(shù)據(jù)管理基礎(chǔ)之上,采用數(shù)據(jù)驅(qū)動的方式,將任務(wù)調(diào)度轉(zhuǎn)化為數(shù)據(jù)調(diào)度,解決了節(jié)點(diǎn)動態(tài)易失效帶來的影響,提供了一種Internet環(huán)境下簡單有效的容錯MapReduce計算模型與方法。采用本發(fā)明,可在校園、企業(yè)、政府內(nèi)利用現(xiàn)有桌面PC構(gòu)建以私有為目的的MapReduce計算平臺來進(jìn)行海量數(shù)據(jù)分析,或用于改進(jìn)志愿計算系統(tǒng)來支持MapReduce計算模型,降低志愿計算系統(tǒng)應(yīng)用開發(fā)的難度。
文檔編號G06F9/50GK103116525SQ20131002642
公開日2013年5月22日 申請日期2013年1月24日 優(yōu)先權(quán)日2013年1月24日
發(fā)明者賀海武, 唐兵 申請人:賀海武, 唐兵