一種基于Hadoop的海量web數(shù)據(jù)挖掘方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明公開(kāi)一種海量web數(shù)據(jù)挖掘方法,屬于計(jì)算機(jī)數(shù)據(jù)處理領(lǐng)域,具體地說(shuō)是一種基于Hadoop的海量web數(shù)據(jù)挖掘方法。
【背景技術(shù)】
[0002]針對(duì)目前Web數(shù)據(jù)規(guī)模的快速增長(zhǎng),單一節(jié)點(diǎn)的計(jì)算能力已經(jīng)不能勝任大規(guī)模數(shù)據(jù)的分析處理,近幾年來(lái),隨著“云計(jì)算”技術(shù)的興起,人們將海量數(shù)據(jù)存儲(chǔ)與處理的目光轉(zhuǎn)向了這個(gè)新興的技術(shù)。Hadoop “云計(jì)算”平臺(tái)最大的優(yōu)勢(shì)是它實(shí)現(xiàn)了 “計(jì)算靠近存儲(chǔ)”思想,傳統(tǒng)的“移動(dòng)數(shù)據(jù)以靠近計(jì)算”模式在數(shù)據(jù)規(guī)模達(dá)到海量時(shí)的系統(tǒng)開(kāi)銷太大,而“移動(dòng)計(jì)算以靠近存儲(chǔ)”可以省去了海量數(shù)據(jù)的網(wǎng)絡(luò)傳輸這一大開(kāi)銷,就能大幅消減處理時(shí)間。隨著“云計(jì)算”技術(shù)的興起,將現(xiàn)有的數(shù)據(jù)挖掘方法與“云計(jì)算“平臺(tái)融合以提高數(shù)據(jù)挖掘的效率,但是目前對(duì)數(shù)據(jù)挖掘的研宄主要集中在改進(jìn)挖掘系統(tǒng)的有效性方面,而忽視了對(duì)海量數(shù)據(jù)的處理速度的管理。本發(fā)明提供一種基于Hadoop的海量web數(shù)據(jù)挖掘方法,將現(xiàn)有的遺傳算法與Hadoop的MapReduce進(jìn)行融合,針對(duì)Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS中的海量Web數(shù)據(jù)進(jìn)行挖掘。為進(jìn)一步驗(yàn)證該平臺(tái)的高效性,在該平臺(tái)上利用融合后的算法挖掘Web日志中用戶的偏愛(ài)訪問(wèn)路徑。實(shí)驗(yàn)結(jié)果表明,在Hadoop中運(yùn)用分布式算法處理大量的Web數(shù)據(jù),可以明顯提高Web數(shù)據(jù)挖掘的效率,驗(yàn)證該系統(tǒng)的可用性。
【發(fā)明內(nèi)容】
[0003]本發(fā)明針對(duì)數(shù)據(jù)挖掘的研宄主要集中在改進(jìn)挖掘系統(tǒng)的有效性方面,而忽視了對(duì)海量數(shù)據(jù)的處理速度的管理的缺陷,提供一種基于Hadoop的海量web數(shù)據(jù)挖掘方法,在Hadoop中運(yùn)用分布式算法處理大量的Web數(shù)據(jù),可以明顯提高Web數(shù)據(jù)挖掘的效率,驗(yàn)證該系統(tǒng)的可用性。
[0004]本發(fā)明提出的具體方案是:
一種基于Hadoop的海量web數(shù)據(jù)挖掘方法:
搭建數(shù)據(jù)挖掘環(huán)境:在集群服務(wù)器中選擇充當(dāng)NameNode和MapReduce中的JobTracker的服務(wù)器,其余為計(jì)算節(jié)點(diǎn)和數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),測(cè)試數(shù)據(jù)集來(lái)自Web服務(wù)器機(jī)房的服務(wù)器日志;
數(shù)據(jù)挖掘作業(yè)提交:用戶提交基于MapReduce編程規(guī)范編寫(xiě)的作業(yè);
任務(wù)指派:計(jì)算出需要的Map任務(wù)數(shù)和Reduce任務(wù)數(shù),并將Map任務(wù)分給任務(wù)執(zhí)行節(jié)點(diǎn)TaskTracker ;同時(shí)分配相應(yīng)TaskTracker執(zhí)行Reduce任務(wù);
任務(wù)數(shù)據(jù)讀取:被分配到Map子任務(wù)的TaskTracker節(jié)點(diǎn)讀入已經(jīng)分割好的數(shù)據(jù)作為輸入,經(jīng)過(guò)處理后生成key/value對(duì);
Map任務(wù)執(zhí)行:TaskTracker調(diào)用從JobTracker獲取到的用戶編寫(xiě)的Map函數(shù),并將中間結(jié)果緩存在內(nèi)存中;
本地寫(xiě)中間結(jié)果:內(nèi)存中的中間結(jié)果達(dá)到一定閾值后,寫(xiě)入到TaskTracker本地的磁盤(pán)中;
遠(yuǎn)程讀中間文件JASReduce的TaskTracker從JobTracker中獲取子任務(wù),根據(jù)中間結(jié)果的位置信息通過(guò)socket拉取數(shù)據(jù),并利用中間結(jié)果的key值進(jìn)行排序,將具有相同key的對(duì)進(jìn)行合并;
執(zhí)行Reduce任務(wù):執(zhí)行Reduce任務(wù)的TaskTracker遍歷所有排序后的中間數(shù)據(jù),傳遞給用戶的Reduce函數(shù),執(zhí)行Reduce過(guò)程;
輸出結(jié)果:當(dāng)所有的Map任務(wù)和Reduce任務(wù)都完成時(shí),JobTracker控制將Reduce結(jié)果寫(xiě)到HDFS之上。
[0005]所述任務(wù)指派的過(guò)程為:作業(yè)控制節(jié)點(diǎn)JobTracker根據(jù)作業(yè)的情況,計(jì)算出需要的Map任務(wù)數(shù)和Reduce任務(wù)數(shù),并根據(jù)數(shù)據(jù)分布情況和對(duì)應(yīng)節(jié)點(diǎn)的負(fù)載,將Map任務(wù)分給存儲(chǔ)該任務(wù)且負(fù)載最輕的任務(wù)執(zhí)行節(jié)點(diǎn),同時(shí)根據(jù)作業(yè)結(jié)果的要求,分配相應(yīng)TaskTracker執(zhí)行Reduce任務(wù)。
[0006]所述的本地寫(xiě)中間結(jié)果的過(guò)程為:內(nèi)存中的中間結(jié)果達(dá)到一定閾值后,寫(xiě)入到TaskTracker本地的磁盤(pán)中,將這些中間數(shù)據(jù)通過(guò)分區(qū)函數(shù)分成與Reduce任務(wù)數(shù)相同的分區(qū),并將它們的本地磁盤(pán)的位置信息發(fā)送給JobTracker,然后JobTracker將位置信息發(fā)送給執(zhí)行Reduce子任務(wù)的TaskTracker。
[0007]所述的任務(wù)指派中計(jì)算過(guò)程為:MapReduce框架自動(dòng)將測(cè)試集劃分成M份,并對(duì)數(shù)據(jù)進(jìn)行格式化(<id,〈A,B>),id表示日志編號(hào);B表示用戶當(dāng)前訪問(wèn)的頁(yè)面;A表示用戶在訪問(wèn)B之前所停留的頁(yè)面;
然后Map操作對(duì)輸入的每個(gè)記錄進(jìn)行掃描,將數(shù)據(jù)集按照上述格式進(jìn)行初始化;經(jīng)過(guò)Map操作后,得到中間結(jié)果〈〈A, B〉,1>,即用戶從頁(yè)面A訪問(wèn)了頁(yè)面B ;Reduce操作則將中間結(jié)果按照具有相同<A,B>的頁(yè)面跳轉(zhuǎn)訪問(wèn)方式進(jìn)行合并得到輸出結(jié)果〈〈A,B〉,n>,其中,η代表訪問(wèn)路徑A — >Β的頻度。
[0008]每個(gè)數(shù)據(jù)集分別將Reduce操作的結(jié)果轉(zhuǎn)換為鏈表結(jié)構(gòu),鏈表頭部保存k值,鏈表結(jié)構(gòu):k(A, B) (B, D) (D, E)...,其中,k代表染色體的長(zhǎng)度;A, B, C,D,E代表頁(yè)面。
[0009]每個(gè)所述的數(shù)據(jù)集內(nèi)部進(jìn)行遺傳化操作,直到k不再變化,結(jié)束操作。
[0010]所述的遺傳化操作的過(guò)程為:父代染色體中隨機(jī)選擇2條染色體,然后隨機(jī)生成插入位置Ins、刪除位置Del、插入刪除長(zhǎng)度Len ;比較2條染色體是否等長(zhǎng),如果相等,則判斷頭尾是否有重合,如果重合,則連接生成新的染色體,否則,不生成子代染色體;如果不等長(zhǎng),則判斷插入和刪除的2段基因是否相同,如果相同,則合并為一條染色體作為新的染色體,否則,不生成子代染色體。
[0011]所述的遺傳代數(shù)為50或者其倍數(shù)時(shí),數(shù)據(jù)群體間進(jìn)行聯(lián)姻操作。
[0012]本發(fā)明的有益之處是:本發(fā)明遺傳算法與Hadoop的MapReduce進(jìn)行融合,針對(duì)Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS中的海量Web數(shù)據(jù)進(jìn)行挖掘,進(jìn)一步驗(yàn)證該平臺(tái)的高效性,在該平臺(tái)上利用融合后的算法挖掘Web日志中用戶的偏愛(ài)訪問(wèn)路徑,實(shí)驗(yàn)結(jié)果表明,在Hadoop中運(yùn)用分布式算法處理大量的Web數(shù)據(jù),可以明顯提高Web數(shù)據(jù)挖掘的效率。
【附圖說(shuō)明】
[0013]圖1本發(fā)明數(shù)據(jù)挖掘方法的拓?fù)涫疽鈭D。
【具體實(shí)施方式】
[0014]結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明。
[0015]—種基于Hadoop的海量web數(shù)據(jù)挖掘方法:
搭建數(shù)據(jù)挖掘環(huán)境:Had00p平臺(tái)由6臺(tái)寶德PR2310N服務(wù)器組成,其中HDFS中的NameNode和MapReduce中的JobTracker由一臺(tái)服務(wù)器充當(dāng),其余5臺(tái)充當(dāng)計(jì)算節(jié)點(diǎn)和數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)。測(cè)試數(shù)據(jù)集來(lái)自蟻坊軟件的Web服務(wù)器機(jī)房的服務(wù)器日志。測(cè)試程序采用Eclipse for Java developer 平臺(tái)進(jìn)行開(kāi)發(fā);
①數(shù)據(jù)挖掘作業(yè)提交:用戶提交基于MapReduce編程規(guī)范編寫(xiě)的作業(yè);
②任務(wù)指派:計(jì)算出需要的Map任務(wù)數(shù)M和Reduce任務(wù)數(shù)R,并將Map任務(wù)分給任務(wù)執(zhí)行節(jié)點(diǎn)TaskTracker ;同時(shí)分配相應(yīng)TaskTracker執(zhí)行Reduce任務(wù);具體過(guò)程為:作業(yè)控制節(jié)點(diǎn)JobTracker根據(jù)作業(yè)的情況,計(jì)算出需要的Map任務(wù)數(shù)和Reduce任務(wù)數(shù),并根據(jù)數(shù)據(jù)分布情況和對(duì)應(yīng)節(jié)點(diǎn)的負(fù)載,將Map任務(wù)分給存儲(chǔ)該任務(wù)且負(fù)載最輕的任務(wù)執(zhí)行節(jié)點(diǎn),同時(shí)根據(jù)作業(yè)結(jié)果的要求,分配相應(yīng)TaskTracker執(zhí)行Reduce任務(wù);
其中計(jì)算過(guò)程為:MapReduce框架自動(dòng)將測(cè)試集劃分成M份,并對(duì)數(shù)據(jù)進(jìn)行格式化?id, <A, B>),id表示日志編號(hào);B表示用戶當(dāng)前訪問(wèn)的頁(yè)面;A表示用戶在訪問(wèn)B之前所停留的頁(yè)面;
然