一種去重方法及系統(tǒng)的制作方法【專利摘要】本發(fā)明公開(kāi)了一種去重方法,包括:獲取存儲(chǔ)于Hadoop集群系統(tǒng)中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);按照Hadoop集群系統(tǒng)的映射框架中所指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;按照Hadoop集群系統(tǒng)中的歸約框架中所指定的類格式,對(duì)映射處理的結(jié)果進(jìn)行歸約處理,歸約處理的結(jié)果為對(duì)URL去重的結(jié)果;其中映射處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,歸約處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,映射處理和歸約處理分別在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。【專利說(shuō)明】一種去重方法及系統(tǒng)【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及分布式網(wǎng)絡(luò)技術(shù),尤其涉及一種去重方法及系統(tǒng)?!?br>背景技術(shù):
】[0002]隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展與網(wǎng)絡(luò)信息量的不斷劇增,用戶能夠從海量的信息中快速高效的搜索有價(jià)值的信息對(duì)于互聯(lián)網(wǎng)的發(fā)展至關(guān)重要。因此對(duì)于同一資源定位符(URL,UniformResourceLocator)數(shù)據(jù)的去重尤為重要。例如,對(duì)于搜索信息來(lái)說(shuō),網(wǎng)絡(luò)信息采集是其重要組成部分,URL去重直接影響網(wǎng)絡(luò)信息采集的效率。因此,URL的去重方案設(shè)計(jì)與實(shí)現(xiàn)是非常重要的。[0003]目前,對(duì)于去重設(shè)計(jì)方案主要有基于哈希計(jì)算算法的去重方案和基于BloomFilter算法的去重方案等。其中,[0004]哈希計(jì)算算法去重方案的主要思路大致包括:對(duì)每個(gè)URL進(jìn)行哈希計(jì)算,得到唯一的校驗(yàn)和來(lái)標(biāo)識(shí)URL;通過(guò)查找該校驗(yàn)和是否出現(xiàn)在已采集的URL庫(kù)中,如果出現(xiàn),則丟棄;如果未出現(xiàn),查找是否出現(xiàn)在待采集的URL庫(kù)中,出現(xiàn)則丟棄,否則將該URL保存在待采集的URL庫(kù)中。但是哈希算法的計(jì)算復(fù)雜度高,效率差。[0005]BloomFilter算法的去重方案的主要思路大致包括:將同一個(gè)URL通過(guò)多個(gè)不同的哈希計(jì)算函數(shù)映射到同一個(gè)位數(shù)組中的不同位上,根據(jù)其位數(shù)組中多個(gè)不同位的狀態(tài)識(shí)別該URL的采集狀態(tài)(該URL是否已采集)。BloomFilter算法的優(yōu)點(diǎn)是,只需要在內(nèi)存中保存位數(shù)組這樣一個(gè)數(shù)據(jù)結(jié)構(gòu),就能夠判別URL的采集狀態(tài),不需要保存具體的URL,占用的存儲(chǔ)空間小,同時(shí)查找計(jì)算的速度快。但是,BloomFilter算法在判斷一個(gè)元素是否屬于某個(gè)集合時(shí),有可能會(huì)把不屬于這個(gè)集合的元素誤認(rèn)為屬于這個(gè)集合。因此BloomFilter算法的缺點(diǎn)是不能做到精確無(wú)誤,存在一定的誤差?!?br/>發(fā)明內(nèi)容】[0006]為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種去重方法及系統(tǒng),能夠在Hadoop集群中并發(fā)的訪問(wèn)、處理數(shù)據(jù),保證去重的高效性和準(zhǔn)確性。[0007]為了達(dá)到本發(fā)明的目的,本發(fā)明提供了一種去重方法,包括:獲取存儲(chǔ)于Hadoop集群系統(tǒng)中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);[0008]按照所述Hadoop集群系統(tǒng)的映射框架中所指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;[0009]按照所述Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)所述映射處理的結(jié)果進(jìn)行歸約處理;[0010]其中,所述映射處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述歸約處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述映射處理和所述歸約處理分別在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。[0011]進(jìn)一步地,所述映射處理所在節(jié)點(diǎn)與所述歸約處理所在節(jié)點(diǎn)相同;或者,所述映射處理所在節(jié)點(diǎn)與所述歸約處理所在節(jié)點(diǎn)不同。[0012]進(jìn)一步地,所述映射處理包括:判斷所述獲得的URL數(shù)據(jù)是否已被采集,如果已被采集,則寫入中間數(shù)據(jù)文件中;否則,根據(jù)所述獲得的URL數(shù)據(jù)所對(duì)應(yīng)的原始網(wǎng)頁(yè)中的鏈接,計(jì)算采集權(quán)值,并將所述獲得的URL數(shù)據(jù)標(biāo)記為已采集狀態(tài)。[0013]進(jìn)一步地,所述歸約處理包括:將所述映射處理的結(jié)果放在同一個(gè)歸約任務(wù)中批量執(zhí)行。[0014]進(jìn)一步地,所述執(zhí)行映射處理的節(jié)點(diǎn)的數(shù)量為預(yù)先設(shè)置。[0015]進(jìn)一步地,所述執(zhí)行歸約處理的節(jié)點(diǎn)的數(shù)量為預(yù)先設(shè)置。[0016]本發(fā)明提供了一種去重系統(tǒng),包括:[0017]數(shù)據(jù)獲取設(shè)備,用于獲取存儲(chǔ)于Hadoop集群系統(tǒng)中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);[0018]映射處理設(shè)備,用于按照所述Hadoop集群系統(tǒng)的映射框架中指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;[0019]歸約處理設(shè)備,用于按照所述Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)所述映射處理的結(jié)果進(jìn)行歸約處理,歸約處理的結(jié)果為對(duì)URL去重的結(jié)果;[0020]其中,所述映射處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述歸約處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述映射處理和所述歸約處理分別在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。[0021]進(jìn)一步地,所述映射處理和所述歸約處理在所述Hadoop集群系統(tǒng)的相同的節(jié)點(diǎn)中執(zhí)行或、所述映射處理和所述歸約處理在所述Hadoop集群系統(tǒng)的不同的節(jié)點(diǎn)中執(zhí)行。[0022]進(jìn)一步地,所述映射處理設(shè)備具體用于:判斷獲得的URL數(shù)據(jù)是否已被采集,如果已被采集,則寫入中間數(shù)據(jù)文件中;否則根據(jù)所述URL數(shù)據(jù)所對(duì)應(yīng)的原始網(wǎng)頁(yè)中的鏈接,計(jì)算采集權(quán)值,并將所述URL數(shù)據(jù)標(biāo)記為已采集狀態(tài)。[0023]進(jìn)一步地,通過(guò)參數(shù)設(shè)置執(zhí)行所述映射處理的節(jié)點(diǎn)的數(shù)量。[0024]進(jìn)一步地,通過(guò)參數(shù)設(shè)置執(zhí)行所述歸約處理的節(jié)點(diǎn)的數(shù)量。[0025]本發(fā)明方案通過(guò)獲取存儲(chǔ)于Hadoop集群系統(tǒng)中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);按照所述Hadoop集群系統(tǒng)的映射框架中所指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;按照所述Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)所述映射處理的結(jié)果進(jìn)行歸約處理,從而解決了在Hadoop集群系統(tǒng)中并發(fā)地訪問(wèn)、處理數(shù)據(jù),并保證了去重的高效性和準(zhǔn)確性。[0026]本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說(shuō)明書(shū)中闡述,并且,部分地從說(shuō)明書(shū)中變得顯而易見(jiàn),或者通過(guò)實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過(guò)在說(shuō)明書(shū)、權(quán)利要求書(shū)以及附圖中所特別指出的結(jié)構(gòu)來(lái)實(shí)現(xiàn)和獲得?!緦@綀D】【附圖說(shuō)明】[0027]附圖用來(lái)提供對(duì)本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說(shuō)明書(shū)的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。[0028]圖1為本發(fā)明去重方法的流程圖;[0029]圖2為本發(fā)明去重系統(tǒng)的示意圖;[0030]圖3為本發(fā)明URL去重模塊的類結(jié)構(gòu)的示意圖;[0031]圖4為本發(fā)明URL去重模塊的時(shí)序圖。【具體實(shí)施方式】[0032]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本發(fā)明中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。[0033]在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。[0034]圖1為本發(fā)明去重方法的流程圖,如圖1所示,包括以下步驟:[0035]步驟100:獲取存儲(chǔ)于Hadoop集群中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);[0036]本步驟中,URL數(shù)據(jù)可以是因特網(wǎng)、局域網(wǎng)中的網(wǎng)絡(luò)資源。URL數(shù)據(jù)可以下載到本地、或可以下載到Hadoop集群的任意一個(gè)或多個(gè)節(jié)點(diǎn)中。這些數(shù)據(jù)文件可以在線獲取,并在線處理。進(jìn)一步地,URL數(shù)據(jù)也可以是存儲(chǔ)在本地的文件。優(yōu)選地,將URL數(shù)據(jù)存儲(chǔ)在Hadoop分布式文件系統(tǒng)(HDFS,HadoopDistributedFileSystem)上,以提高URL數(shù)據(jù)的去重的效率。[0037]步驟102:按照Hadoop集群系統(tǒng)的映射框架中指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理。[0038]本步驟中,繼承Hadoop集群系統(tǒng)的映射框架中的映射類,根據(jù)Hadoop計(jì)算框架中的映射類,編寫相關(guān)函數(shù)。這些函數(shù)可以包括映射函數(shù),其中映射函數(shù)可以完成步驟102中所實(shí)現(xiàn)的功能。例如,映射函數(shù)將待采集和已采集的狀態(tài)設(shè)置成真(true)或假(false)。映射函數(shù)的一個(gè)作用是為了歸約函數(shù)做準(zhǔn)備。[0039]優(yōu)選地,本發(fā)明實(shí)施例中以Hadoop計(jì)算框架的映射歸約編程模式來(lái)詳細(xì)闡述映射函數(shù)的實(shí)現(xiàn)方式。首先,Hadoop計(jì)算框架的映射歸約編程模式的運(yùn)行機(jī)制:函數(shù)庫(kù)首先把輸入文件(URL數(shù)據(jù))分成M塊,接著在集群的機(jī)器上執(zhí)行處理程序。映射函數(shù)運(yùn)行過(guò)程中有一個(gè)主控程序,稱為master。主控程序會(huì)產(chǎn)生很多作業(yè)程序,稱為worker。主控程序把M個(gè)映射任務(wù)和R個(gè)歸約任務(wù)分別分配給這些具有worker的一個(gè)和多個(gè)節(jié)點(diǎn),并讓這些節(jié)點(diǎn)并發(fā)執(zhí)行。被分配了映射任務(wù)的worker節(jié)點(diǎn),讀取并分析相關(guān)的URL輸入數(shù)據(jù),將分析出的鍵/值(key/value)對(duì),傳遞給用戶定義的歸約函數(shù)。映射函數(shù)產(chǎn)生的中間結(jié)果鍵/值(key/value)對(duì)暫時(shí)緩沖到內(nèi)存。映射函數(shù)緩沖到內(nèi)存的中間結(jié)果將被定時(shí)刷寫到本地硬盤、和/或Hadoop集群中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中。隨后將這些中間結(jié)果通過(guò)分區(qū)函數(shù)分成R個(gè)區(qū),并將這些中間結(jié)果所在的位置信息發(fā)送回master。[0040]然而,隨著被保存的數(shù)據(jù)規(guī)模的不斷擴(kuò)大,需要對(duì)其進(jìn)行壓縮存儲(chǔ)。采用了MD5算法對(duì)已采集過(guò)的數(shù)據(jù)進(jìn)行hash計(jì)算,這樣每個(gè)數(shù)據(jù)保存時(shí)僅需32字節(jié)長(zhǎng)度,因此減少了存儲(chǔ)空間。該方法的數(shù)據(jù)去重策略計(jì)算過(guò)程較為簡(jiǎn)潔,且支持并行計(jì)算,因此更為高效。[0041]步驟104:按照Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)映射處理的結(jié)果、或獲得的URL數(shù)據(jù)進(jìn)行歸約處理;其中映射處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行;歸約處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行;映射處理和歸約處理分別在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。[0042]本步驟中,繼承Hadoop集群系統(tǒng)的歸約框架中的歸約類,歸約函數(shù)可以先對(duì)映射函數(shù)的處理結(jié)果進(jìn)行遍歷歸約、也可以對(duì)所獲取的URL數(shù)據(jù)進(jìn)行遍歷歸約、還可以同時(shí)對(duì)映射函數(shù)的處理結(jié)果和URL數(shù)據(jù)進(jìn)行遍歷歸約。例如,可以采用MD5算法,對(duì)映射函數(shù)的處理結(jié)果,進(jìn)行迭代地遍歷記錄。對(duì)遍歷結(jié)果進(jìn)行標(biāo)識(shí),并對(duì)遍歷結(jié)果按照相關(guān)屬性進(jìn)行歸類。[0043]優(yōu)選地,本發(fā)明結(jié)合Hadoop計(jì)算框架的映射歸約編程模式,來(lái)對(duì)歸約函數(shù)的實(shí)現(xiàn)進(jìn)行詳細(xì)闡述。例如,master負(fù)責(zé)把映射函數(shù)的處理結(jié)果所在的位置信息、URL數(shù)據(jù)所在的位置信息傳送給歸約函數(shù)的worker。當(dāng)master通知了歸約函數(shù)的worker關(guān)于中間鍵/值(key/value)對(duì)的位置時(shí),worker調(diào)用遠(yuǎn)程方法,并從映射函數(shù)的worker機(jī)器所在的本地硬盤上讀取緩沖的中間數(shù)據(jù)。當(dāng)歸約函數(shù)的worker讀取到了所有的中間數(shù)據(jù),它就使用這些中間數(shù)據(jù)的鍵(key)進(jìn)行排序,這樣可以使得相同鍵(key)的值都在一起。并對(duì)中間結(jié)果集進(jìn)行外排序。歸約函數(shù)的worker根據(jù)每一個(gè)中間結(jié)果的鍵(key)來(lái)遍歷排序后的數(shù)據(jù),并且把鍵(key)和相關(guān)的中間結(jié)果值(value)集合傳遞給歸約函數(shù),最終把輸出結(jié)果存放在master機(jī)器的一個(gè)輸出文件中。[0044]進(jìn)一步地,映射處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行;歸約處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行;映射處理和歸約處理分別在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。具體地:[0045]映射函數(shù)和歸約函數(shù)可以在相同的節(jié)點(diǎn)或不同的節(jié)點(diǎn)中執(zhí)行。映射函數(shù)和歸約函數(shù)可以并發(fā)執(zhí)行、和/或順序執(zhí)行。優(yōu)選地,映射函數(shù)和歸約函數(shù)可以在hadoop集群中的任何一個(gè)或多個(gè)服務(wù)器中順序執(zhí)行、或并發(fā)執(zhí)行。也可以在Hadoop集群中任何一個(gè)或多個(gè)節(jié)點(diǎn)中順序執(zhí)行,或并發(fā)執(zhí)行。[0046]優(yōu)選地,本發(fā)明結(jié)合Hadoop計(jì)算框架的映射歸約編程模式,來(lái)對(duì)上述步驟的實(shí)現(xiàn)進(jìn)行詳細(xì)闡述。在Hadoop集群系統(tǒng)的的一個(gè)或多個(gè)節(jié)點(diǎn)中,根據(jù)用戶程序指定的輸入文件的目錄,按照HDFS文件的數(shù)據(jù)塊大小,由Hadoop計(jì)算框架的映射歸約編程模型接口中的一個(gè)接口(例如,InputSplit接口),來(lái)劃分?jǐn)?shù)據(jù)文件。且每一個(gè)數(shù)據(jù)塊對(duì)應(yīng)一個(gè)映射任務(wù)。同時(shí)對(duì)于每一個(gè)劃分的數(shù)據(jù)塊,按照用戶程序中指定的輸入文件的格式劃分成相應(yīng)格式的數(shù)據(jù)記錄。其中這些數(shù)據(jù)塊可以分布于同一個(gè)節(jié)點(diǎn)中,也可以分布在不同的節(jié)點(diǎn)中。將已采集過(guò)的數(shù)據(jù)庫(kù)中的文件按照HDFS系統(tǒng)文件塊的大小,先劃分為不同的數(shù)據(jù)塊,在每一個(gè)數(shù)據(jù)塊中,按照待采集的數(shù)據(jù)格式劃分為不同的數(shù)據(jù)記錄,可選地,還可以將從新下載的未去重的URL數(shù)據(jù)按照系統(tǒng)文件塊的大小,來(lái)劃分在不同的數(shù)據(jù)塊中。在每一個(gè)數(shù)據(jù)塊中,按照待采集的數(shù)據(jù)格式劃分為不同的數(shù)據(jù)記錄(例如,〈URL,URLWritable〉)。[0047]其中每個(gè)映射任務(wù)可以由多個(gè)節(jié)點(diǎn)并發(fā)或順序執(zhí)行。映射任務(wù)按照迭代的方式,將每一個(gè)數(shù)據(jù)記錄按照映射函數(shù)中指定的方法進(jìn)行處理。對(duì)于處理結(jié)果,可以按照映射輸出格式(例如,〈key,value〉)保存在本地文件系統(tǒng)上、或保存在任意一個(gè)或多個(gè)節(jié)點(diǎn)中。根據(jù)數(shù)據(jù)格式記錄的字段的布爾值,來(lái)判斷該數(shù)據(jù)是否被采集過(guò),如果該數(shù)據(jù)已被采集過(guò),則以相應(yīng)的格式(例如,〈MD5(URL),URLWritable>),直接寫入到中間數(shù)據(jù)文件、或其它一個(gè)或多個(gè)節(jié)點(diǎn)中。否則,表明該數(shù)據(jù)未被采集過(guò),并對(duì)該數(shù)據(jù)進(jìn)行相關(guān)采集操作(例如,抽取出待采集數(shù)據(jù)的采集權(quán)值并賦值一通過(guò)設(shè)置數(shù)據(jù)格式中的相關(guān)字段,然后將該數(shù)據(jù)的相應(yīng)字段的布爾值設(shè)置為true)。[0048]而歸約函數(shù)則可以對(duì)上述映射的處理結(jié)果進(jìn)行遍歷歸約。其中歸約函數(shù)可以和映射函數(shù)存在于同一個(gè)節(jié)點(diǎn)中,也可以存在于不同的節(jié)點(diǎn)中。執(zhí)行歸約函數(shù)的節(jié)點(diǎn)中,會(huì)有JobTracker進(jìn)程,以通知每一個(gè)歸約任務(wù)需要從哪些數(shù)據(jù)節(jié)點(diǎn)中拉取數(shù)據(jù),并且按照用戶程序指定的歸約輸入文件格式(例如,同映射的輸出文件格式)以及按照歸約函數(shù)指定的方式迭代處理這些記錄。最后按照用戶程序指定的輸出文件格式輸出到指定的輸出文件目錄中。[0049]本發(fā)明的方法還包括:通過(guò)參數(shù)控制執(zhí)行映射函數(shù)和歸約函數(shù)的節(jié)點(diǎn)數(shù)量。優(yōu)選地,可以在Hadoop集群中設(shè)置30個(gè)節(jié)點(diǎn)執(zhí)行映射函數(shù),還可以設(shè)置30個(gè)節(jié)點(diǎn)來(lái)執(zhí)行歸約函數(shù),其中,上述這30個(gè)節(jié)點(diǎn)可以是完全相同的節(jié)點(diǎn),也可以是完全不同的節(jié)點(diǎn),還可以設(shè)置成部分節(jié)點(diǎn)相同,部分節(jié)點(diǎn)不相同。并且這些節(jié)點(diǎn)可以是服務(wù)器、客戶端、服務(wù)器集群、網(wǎng)絡(luò)設(shè)備。[0050]本發(fā)明的方法還包括:映射函數(shù):采用MD5算法對(duì)數(shù)據(jù)文件進(jìn)行哈希計(jì)算;歸約函數(shù):對(duì)映射函數(shù)的執(zhí)行結(jié)果進(jìn)行批量地遍歷并分類輸出。映射函數(shù)中,每一個(gè)映射任務(wù)將數(shù)據(jù)記錄按照函數(shù)中指定輸入類的標(biāo)準(zhǔn)格式進(jìn)行處理,將數(shù)據(jù)處理后的結(jié)果作為中間結(jié)果,按照鍵值對(duì)〈key,value)的形式存儲(chǔ)在本地文件系統(tǒng)中。該模塊主要根據(jù)數(shù)據(jù)格式記錄的標(biāo)記來(lái)判斷該數(shù)據(jù)是否被采集,如果是已采集狀態(tài),則直接寫入到中間數(shù)據(jù)文件中;否則,該數(shù)據(jù)為新采集的數(shù)據(jù),計(jì)算新采集數(shù)據(jù)所對(duì)應(yīng)的采集權(quán)值,并將其標(biāo)記為已采集狀態(tài)。最后將該數(shù)據(jù)存儲(chǔ)到中間數(shù)據(jù)文件中。歸約函數(shù)中,Hadoop計(jì)算框架中Jobtracker將創(chuàng)建歸約Task,并監(jiān)控該歸約Task作業(yè)。歸約Task任務(wù)會(huì)根據(jù)指示,到相應(yīng)的數(shù)據(jù)節(jié)點(diǎn)取出數(shù)據(jù),且按照指定的類格式對(duì)數(shù)據(jù)進(jìn)行處理,最后的處理結(jié)果按照用戶的指定輸出格式及輸出路徑存儲(chǔ)到文件系統(tǒng)中。該模塊是將映射函數(shù)中的key值相同的放在同一個(gè)resuceTask中執(zhí)行,并根據(jù)數(shù)據(jù)格式中的標(biāo)記來(lái)判斷數(shù)據(jù)是待采集狀態(tài)還是已采集狀態(tài),若為待采集狀態(tài),則寫入到指定的待采集的輸出目錄中;若為已采集狀態(tài),則寫入到指定的已采集的數(shù)據(jù)輸出目錄。[0051]圖2為本發(fā)明去重系統(tǒng)的示意圖,其包括數(shù)據(jù)獲取設(shè)備、映射處理設(shè)備、以及歸約處理設(shè)備,其中:[0052]數(shù)據(jù)獲取設(shè)備,用于獲取存儲(chǔ)于Hadoop集群中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);[0053]映射處理設(shè)備,用于按照Hadoop集群系統(tǒng)的映射框架中指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;[0054]歸約處理設(shè)備,用于按照Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)映射處理的結(jié)果進(jìn)行歸約處理,歸約處理的結(jié)果為對(duì)URL去重的結(jié)果;[0055]其中映射處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,歸約處理在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,映射處理和歸約處理分別在Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。[0056]具體地,數(shù)據(jù)預(yù)處理設(shè)備和數(shù)據(jù)歸約設(shè)備可以是Hadoop集群中相同的節(jié)點(diǎn),也可以是不同的節(jié)點(diǎn)。并且可以通過(guò)參數(shù)控制所述數(shù)據(jù)預(yù)處理設(shè)備和所述數(shù)據(jù)歸約設(shè)備的數(shù)量。[0057]以基于Hadoop集群的URL去重策略為實(shí)例,對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。其【具體實(shí)施方式】如下:[0058]在網(wǎng)絡(luò)信息采集中,要保證待采集的URL是唯一的,即確定已采集過(guò)的URL庫(kù)中不包含待采集的URL。因此,這涉及到URL的去重方案的設(shè)計(jì)。本發(fā)明利用Hadoop計(jì)算框架對(duì)數(shù)據(jù)的分析處理能力,利用Hadoop中的計(jì)算框架,來(lái)解決URL的去重問(wèn)題,以提高網(wǎng)絡(luò)信息采集的效率。該URL去重方案是將從網(wǎng)頁(yè)中新抽取的URL與已采集的URL庫(kù)進(jìn)行對(duì)比去重,并將結(jié)果寫入待采集的URL庫(kù)中。隨著網(wǎng)絡(luò)信息采集的擴(kuò)大,被保存的URL也不斷擴(kuò)大,采取的措施是:一方面采用MD5算法對(duì)已采集過(guò)的URL進(jìn)行哈希,有效的減少存儲(chǔ)空間?’另一方面,利用Hadoop分布式框架中的HDFS存儲(chǔ)大規(guī)模的數(shù)據(jù)。下面詳細(xì)介紹其具體實(shí)現(xiàn)過(guò)程。[0059]首先利用Hadoop計(jì)算框架來(lái)編寫映射函數(shù)和歸約函數(shù)。其中映射函數(shù)和歸約函數(shù)可以同時(shí)分布在Hadoop集群的同一個(gè)節(jié)點(diǎn)中,也可以分布在Hadoop集群的不同節(jié)點(diǎn)中。映射函數(shù)可以在Hadoop集群的一個(gè)節(jié)點(diǎn)中先序執(zhí)行,也可以在Hadoop集群的多個(gè)節(jié)點(diǎn)中同時(shí)并發(fā)執(zhí)行映射函數(shù)??梢栽贖adoop集群的多個(gè)節(jié)點(diǎn)中執(zhí)行映射函數(shù),并且同時(shí)在Hadoop集群的多個(gè)節(jié)點(diǎn)中執(zhí)行歸約函數(shù)。[0060]其次設(shè)計(jì)所有函數(shù)的類結(jié)構(gòu)。其中URL去重模塊的類結(jié)構(gòu)示意圖如圖3所示。ParseExtractDriver類為實(shí)現(xiàn)URL抽取、去重功能的主類,在這個(gè)類中,還包括映射歸約任務(wù)的ParseExtract映射per類、以及ParseExtract歸約r類,這兩個(gè)類通過(guò)實(shí)現(xiàn)映射或是歸約接口,分別完成映射歸約任務(wù)中的映射任務(wù)和歸約任務(wù)。此外,該類圖中還包含有從新下載的網(wǎng)頁(yè)中抽取出URL的Parser類,URLFilter類和URLCanonicalizerURL類完成URL過(guò)濾任務(wù),主要是對(duì)URL的后綴規(guī)則匹配和URL格式的合法性校驗(yàn),MutilDiretorySequenceFiIeOutputFormat類指定該功能模塊輸出的數(shù)據(jù)塊格式。[0061]所有函數(shù)運(yùn)行的時(shí)序圖如附圖4所示。首先將已采集的URL庫(kù)中的文件按照HDFS系統(tǒng)文件塊的大小,先劃分為不同的數(shù)據(jù)塊,在每一個(gè)數(shù)據(jù)塊中,按照待采集的URL的格式劃分為不同的數(shù)據(jù)記錄〈URL,URLWritable>,此外,還將從新下載的未去重的網(wǎng)頁(yè)庫(kù)中的文件按照HDFS系統(tǒng)文件塊的大小,先劃分為不同的數(shù)據(jù)塊,在每一個(gè)數(shù)據(jù)塊中,按照待采集的URL的格式劃分為不同的數(shù)據(jù)記錄〈URL,URLWritable〉;其次,在映射函數(shù)中根據(jù)數(shù)據(jù)格式〈URL,URLWritable〉記錄的URLWritable中的catchedStatus字段的Boolean值判斷該URL對(duì)應(yīng)是否為被采集的URL,如果對(duì)應(yīng)為已采集的URL,則以<MD5(URL),URLWritable〉格式直接寫入到中間數(shù)據(jù)文件中,否則,表明該URL對(duì)應(yīng)的為新采集的網(wǎng)頁(yè),從URLWritable中的webContent字段中獲取該URL對(duì)應(yīng)的原始網(wǎng)頁(yè)內(nèi)容,并根據(jù)網(wǎng)頁(yè)的結(jié)構(gòu)和網(wǎng)頁(yè)中的相關(guān)標(biāo)記(href)等,抽取出網(wǎng)頁(yè)中鏈出的錨文本(URL),此外,對(duì)抽取出待采集的URL計(jì)算URL對(duì)應(yīng)的網(wǎng)頁(yè)的采集權(quán)值并賦值(通過(guò)設(shè)置URLWritable數(shù)據(jù)格式中的score字段),然后對(duì)于剛采集的URL,將其URLWritable中的catchedStatus字段的Boolean值設(shè)置為true,對(duì)于從該URL對(duì)應(yīng)的網(wǎng)頁(yè)中抽取的URL,初始化為URLWritable格式,并將其中的catchedStatus字段的Boolean值設(shè)置為false,然后按照〈MD5(URL),URLWritable〉格式將剛采集的URL和新抽取的URL寫入到中間數(shù)據(jù)文件中;最后,在歸約階段根據(jù)映射階段的中間結(jié)果處理,對(duì)相同key中的每個(gè)Value進(jìn)行遍歷,URLWritabIe中有任何一個(gè)記錄的catchedStatus字段的Boolean值為true,貝U表明該key對(duì)應(yīng)的URL為已米集的URL,將其按照〈MD5(URL),URLffritable)格式寫入到指定的已采集的URL庫(kù)的輸出目錄中,如果這些URLWritable集合中的任何一個(gè)URLWritable記錄中的catchedStatus字段的Boolean值都為false,則表明該URL對(duì)應(yīng)的網(wǎng)頁(yè)從未被下載,將其按照〈URL,URLWritable〉格式寫入到指定的待采集的URL庫(kù)的輸出目錄中。[0062]本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明實(shí)施例所提供的裝置的各組成部分,以及方法中的各步驟,它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上。可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn)。從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。[0063]雖然本發(fā)明所揭露的實(shí)施方式如上,但該的內(nèi)容僅為便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書(shū)所界定的范圍為準(zhǔn)?!緳?quán)利要求】1.一種去重方法,其特征在于,包括:獲取存儲(chǔ)于Hadoop集群系統(tǒng)中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);按照所述Hadoop集群系統(tǒng)的映射框架中所指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;按照所述Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)所述映射處理的結(jié)果進(jìn)行歸約處理;其中,所述映射處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述歸約處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述映射處理和所述歸約處理分別在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。2.根據(jù)權(quán)利要求1所述的去重方法,其特征在于,所述映射處理所在節(jié)點(diǎn)與所述歸約處理所在節(jié)點(diǎn)相同;或者,所述映射處理所在節(jié)點(diǎn)與所述歸約處理所在節(jié)點(diǎn)不同。3.根據(jù)權(quán)利要求1或2所述的去重方法,其特征在于,所述映射處理包括:判斷所述獲得的URL數(shù)據(jù)是否已被采集,如果已被采集,則寫入中間數(shù)據(jù)文件中;否則,根據(jù)所述獲得的URL數(shù)據(jù)所對(duì)應(yīng)的原始網(wǎng)頁(yè)中的鏈接,計(jì)算采集權(quán)值,并將所述獲得的URL數(shù)據(jù)標(biāo)記為已米集狀態(tài)。4.根據(jù)權(quán)利要求1或2所述的去重方法,其特征在于,所述歸約處理包括:將所述映射處理的結(jié)果放在同一個(gè)歸約任務(wù)中批量執(zhí)行。5.根據(jù)權(quán)利要求3所述的去重方法,其特征在于,所述執(zhí)行映射處理的節(jié)點(diǎn)的數(shù)量為預(yù)先設(shè)置。6.根據(jù)權(quán)利要求4所述的去重方法,其特征在于,所述執(zhí)行歸約處理的節(jié)點(diǎn)的數(shù)量為預(yù)先設(shè)置。7.—種去重系統(tǒng),其特征在于,包括:數(shù)據(jù)獲取設(shè)備,用于獲取存儲(chǔ)于Hadoop集群系統(tǒng)中的任意一個(gè)或多個(gè)節(jié)點(diǎn)中,或者分布于任意網(wǎng)絡(luò)資源中的URL數(shù)據(jù);映射處理設(shè)備,用于按照所述Hadoop集群系統(tǒng)的映射框架中指定的輸入類格式,對(duì)獲得的URL數(shù)據(jù)進(jìn)行映射處理;歸約處理設(shè)備,用于按照所述Hadoop集群系統(tǒng)的歸約框架中指定的類格式,對(duì)所述映射處理的結(jié)果進(jìn)行歸約處理,歸約處理的結(jié)果為對(duì)URL去重的結(jié)果;其中,所述映射處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述歸約處理在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中執(zhí)行,所述映射處理和所述歸約處理分別在所述Hadoop集群系統(tǒng)的一個(gè)或多個(gè)節(jié)點(diǎn)中并發(fā)、或順序執(zhí)行。8.根據(jù)權(quán)利要求7所述的去重系統(tǒng),其特征在于,所述映射處理和所述歸約處理在所述Hadoop集群系統(tǒng)的相同的節(jié)點(diǎn)中執(zhí)行或、所述映射處理和所述歸約處理在所述Hadoop集群系統(tǒng)的不同的節(jié)點(diǎn)中執(zhí)行。9.根據(jù)權(quán)利要求7所述的去重系統(tǒng),其特征在于,所述映射處理設(shè)備具體用于:判斷獲得的URL數(shù)據(jù)是否已被采集,如果已被采集,則寫入中間數(shù)據(jù)文件中;否則根據(jù)所述URL數(shù)據(jù)所對(duì)應(yīng)的原始網(wǎng)頁(yè)中的鏈接,計(jì)算采集權(quán)值,并將所述URL數(shù)據(jù)標(biāo)記為已采集狀態(tài)。10.根據(jù)權(quán)利要求7或9所述的去重系統(tǒng),其特征在于,通過(guò)參數(shù)設(shè)置執(zhí)行所述映射處理的節(jié)點(diǎn)的數(shù)量。11.根據(jù)權(quán)利要求7或9所述的去重系統(tǒng),其特征在于,通過(guò)參數(shù)設(shè)置執(zhí)行所述歸約處理的節(jié)點(diǎn)的數(shù)量?!疚臋n編號(hào)】G06F17/30GK103530369SQ201310478890【公開(kāi)日】2014年1月22日申請(qǐng)日期:2013年10月14日優(yōu)先權(quán)日:2013年10月14日【發(fā)明者】郭美思,何志平,吳楠申請(qǐng)人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司