王嶸冰 徐紅艷 魏蓮蓮
(遼寧大學(xué)信息學(xué)院 沈陽 110036)
隨著大數(shù)據(jù)時代的來臨,在科學(xué)計算、商業(yè)計算等諸多領(lǐng)域蘊(yùn)含著海量數(shù)據(jù)[1]。從這些海量數(shù)據(jù)中挖掘出其潛在價值已經(jīng)成為當(dāng)今學(xué)術(shù)界關(guān)注的熱點(diǎn)。在大數(shù)據(jù)處理方面,Google提出的Ma?pReduce框架[2]以其適用于大數(shù)據(jù)計算而成為大數(shù)據(jù)環(huán)境的關(guān)鍵計算模型。與常規(guī)分布式算法相比較,MapReduce的優(yōu)勢如下:
1)并行化程度高:在大數(shù)據(jù)處理過程中使用集群技術(shù),以達(dá)到常規(guī)分布式算法無法實(shí)現(xiàn)的高效率。
2)經(jīng)濟(jì)性:普通的PC機(jī)可作為集群節(jié)點(diǎn)用于處理數(shù)據(jù)。
3)容錯性好:MapReduce使用多副本冗余機(jī)制。
4)擴(kuò)展性強(qiáng):可用于PB級數(shù)據(jù)的處理,而且可以根據(jù)實(shí)際需要來擴(kuò)展集群節(jié)點(diǎn)。
因此,將分布式數(shù)據(jù)挖掘技術(shù)與MapReduce模式相融合是大數(shù)據(jù)挖掘的主要研究方向[3]。
關(guān)聯(lián)規(guī)則挖掘算法FP-growth,其思想是分而治之[4],相較于需多次掃描數(shù)據(jù)庫、產(chǎn)生大量候選集的Apriori算法[5],在分布式環(huán)境中使用更廣泛,但弊端是局部站點(diǎn)通信量較大。Chen等[6]為解決此問題,采用垂直模式樹存儲數(shù)據(jù),提出了高性能并行算法HPFP,克服了原FP-growth算法通信大的弊端。徐杰等[7]采用了數(shù)據(jù)并行和任務(wù)并行來提高挖掘效率,提出了基于垂直FP樹的并行頻繁項(xiàng)集挖掘算法。馮勇等[8]提出分布關(guān)聯(lián)規(guī)則挖掘算法VFP-LBDM,通過提高站點(diǎn)的負(fù)載均衡程度來縮小節(jié)點(diǎn)執(zhí)行時間差異,提高了整體的執(zhí)行效率。以上算法在分布式環(huán)境中一定程度上提高了算法效率,但在大數(shù)據(jù)環(huán)境中,并行化程度遠(yuǎn)不及MapRe?duce模式。
針對分布式垂直FP-growth算法在大數(shù)據(jù)環(huán)境下CPU、內(nèi)存、I/O開銷大和計算效率低的問題,本文提出基于MapReduce的垂直FP-growth挖掘算法(Vertical FP-growth Mining Algorithm Based on Ma?pReduce,MR-VFP),通過將分布式垂直FP-growth算法與MapReduce模式相融合,實(shí)現(xiàn)高度并行化計算以減少硬件資源的消耗。
垂直FP-growth算法是一個基于全局樹結(jié)構(gòu)的關(guān)聯(lián)規(guī)則算法[11],它不僅繼承了FP-growth算法分而治之的優(yōu)點(diǎn),同時又具有以垂直壓縮樹結(jié)構(gòu)減少局部合并過程通信消費(fèi)的優(yōu)勢[12]。在每次迭代過程中,需要對每個局部事務(wù)數(shù)據(jù)項(xiàng)做統(tǒng)計。在數(shù)據(jù)量較大的環(huán)境中,節(jié)點(diǎn)能力更是有限,無法承擔(dān)計算大規(guī)模數(shù)據(jù)的任務(wù)。MapReduce模型是典型的IPSS計算抽象[13],具有高度并行化計算集群上大規(guī)模數(shù)據(jù)的特點(diǎn),而垂直FP-growth算法挖掘的事務(wù)數(shù)據(jù)庫中的每條記錄都是相互獨(dú)立的,因此可以利用MapReduce模型將事務(wù)數(shù)據(jù)庫分割成若干塊,Map階段對每個事務(wù)塊進(jìn)行預(yù)處理,然后shuffle根據(jù)項(xiàng)的不同執(zhí)行分組,combine階段局部合并相同項(xiàng)的記錄,Reduce階段經(jīng)全局合并輸出最終結(jié)果,形成全局頻繁項(xiàng)集和關(guān)聯(lián)規(guī)則。MapReduce模型通過并行化集群計算,使挖掘效率得到極大提高。綜上分析,本文提出了一種基于MapReduce的垂直FP-growth算法——MR-VFP算法。
MR-VFP算法分為數(shù)據(jù)劃分、預(yù)剪枝、VFP-tree序列化、生成全局頻繁樹四個部分。
1)數(shù)據(jù)劃分,頻繁一項(xiàng)集生成。該步驟的主要任務(wù)是將事務(wù)數(shù)據(jù)劃分到各個處理機(jī)上。各站點(diǎn)并行MapReduce操作,計算出頻繁項(xiàng),其過程如圖1。
圖1 MapReduce處理數(shù)據(jù)項(xiàng)過程
在數(shù)據(jù)劃分階段,局部站點(diǎn)執(zhí)行map操作并行挖掘局部數(shù)據(jù)庫,統(tǒng)計出局部頻繁項(xiàng),以<itemid,itemcount>格式輸出,然后reduce操作合并具有相同itemid的項(xiàng),得出全局頻繁項(xiàng)。
2)預(yù)剪枝。中心站點(diǎn)的預(yù)剪枝將根據(jù)各局部節(jié)點(diǎn)返回的頻繁項(xiàng)集進(jìn)行。各站點(diǎn)預(yù)先刪除父節(jié)點(diǎn)為非頻繁項(xiàng)的分支,不再收集該項(xiàng)的支持?jǐn)?shù)信息,然后構(gòu)造局部垂直模式樹,從而有效減少通信量。
3)VFP-tree序列化。對局部垂直模式樹使用深度優(yōu)先遍歷樹,每個節(jié)點(diǎn)的輸出格式為:項(xiàng)與該項(xiàng)所對應(yīng)的計數(shù)。節(jié)點(diǎn)的輸出分為以下三種情況:(1)該節(jié)點(diǎn)有子節(jié)點(diǎn)輸出“-”;(2)沒有子節(jié)點(diǎn)有兄弟節(jié)點(diǎn)輸出“|”;(3)沒有兄弟節(jié)點(diǎn)輸出“+”,并返回該節(jié)點(diǎn)的上一層繼續(xù)掃描。用符號“-”“|”“+”表示樹節(jié)點(diǎn)之間的關(guān)系,以減少站點(diǎn)間的通信開銷。
4)生成全局頻繁樹。本文選取的規(guī)則只由根節(jié)點(diǎn)項(xiàng)出發(fā)而生成以避免規(guī)則冗余。在各局部站點(diǎn)上執(zhí)行MapReduce操作,各站點(diǎn)按照任務(wù)分配表,將生成的規(guī)則發(fā)送給相應(yīng)站點(diǎn),以<itemid,itemseq>格式將以Ii開頭的序列合并到指定的站點(diǎn),生成全局頻繁模式樹,最終輸出全局頻繁森林,其過程如圖2。
圖2 MapReduce處理局部頻繁樹序列過程
MR-VFP算法按照MapReduce框架的結(jié)構(gòu),劃分為頻繁項(xiàng)集構(gòu)建算法、全局頻繁模式樹構(gòu)建算法兩部分。
算法1.MapReduce框架下頻繁項(xiàng)集構(gòu)建算法
輸入:數(shù)據(jù)集D
輸出:全局頻繁項(xiàng)集
Begin
Step1:m個mappers并行地讀取輸入的數(shù)據(jù)切片,對map函數(shù)讀取的某項(xiàng)itemid,依次進(jìn)行下述操作:
IF(項(xiàng)item不為空)
則累計項(xiàng)item出現(xiàn)的次數(shù),輸出<itemid,temcount>鍵值對,其中,itemid 指不同的itemcount為常量;ELSE忽略此對象
Step2:所有key為相同itemid的值集將被一個reducer接收,并由reduce函數(shù)對itemcount值集進(jìn)行累加,形成一個關(guān)于某項(xiàng)的局部支持?jǐn)?shù);
按照下面的步驟構(gòu)建全局項(xiàng)集:
Step3:m個mappers采用并行的方式將輸入的數(shù)據(jù)切片讀入,統(tǒng)計map函數(shù)讀取的每個項(xiàng)itemid,輸出鍵值對<itemid,value<itemid,itemcount>>;
Step4:r個reducers將所有劃分到該reducer分區(qū)的對象子集接收并執(zhí)行下面的操作步驟:1:將對象子集中每個元組itemid插入到列表L中;2:對列表L按itemcount值進(jìn)行排序,形成全局項(xiàng)集;END
算法2.MapReduce框架下全局頻繁模式樹構(gòu)建算法
輸入:局部樹的序列
輸出:全局頻繁模式森林
Begin
Step1:m個mappers并行地讀取輸入的局部樹序列,對map函數(shù)讀取的某項(xiàng)itemid,依次進(jìn)行下述操作:
IF(項(xiàng)item不為空)
則輸出<itemid,itemseq>鍵值對,其中,itemid指
同的項(xiàng),itemseq為以itemid為根節(jié)點(diǎn)的局部樹;
ELSE忽略此對象
Step2:一個reducer接收所有key為相同itemid的序列。reduce函數(shù)對itemseq進(jìn)行合并,形成一個關(guān)于某項(xiàng)的頻繁模式樹;
按照下述操作步驟構(gòu)建全局頻繁模式森林:
Step3:m個mappers將輸入的數(shù)據(jù)切片并行讀取,統(tǒng)計map函數(shù)讀取的每個項(xiàng)itemid,輸出鍵值對<itemid,value<itemid,itemseq>>;
Step4:r個reducers接收所有劃分到該reducer分區(qū)的對象子集并執(zhí)行下屬操作步驟:
1:將對象子集中每個頻繁模式樹進(jìn)行合并,形成全局頻繁模式樹;
2:對頻繁樹按根節(jié)點(diǎn)itemcount進(jìn)行排序,形成全局頻繁模式森林;
END
本算法開銷主要包括:統(tǒng)計項(xiàng)的支持?jǐn)?shù)從而得到每個項(xiàng)的全局支持?jǐn)?shù),以及在局部樹合并成全局頻繁模式樹的兩個過程。如果總共有m1條事務(wù)記錄,平均每條記錄包含n1個數(shù)據(jù)項(xiàng),參與計算的節(jié)點(diǎn)為k個,每個節(jié)點(diǎn)上可以同時處理 p個Map、Re?duce。整個計算頻繁項(xiàng)集的過程需要t1次迭代達(dá)到全局結(jié)果,則數(shù)據(jù)劃分階段,時間復(fù)雜度為同理,在全局頻繁森林生成階段,復(fù),其中n2指數(shù)據(jù)項(xiàng)個數(shù),每個數(shù)據(jù)項(xiàng)平均有m2個局部樹,迭代次數(shù)為t2。由此可知,當(dāng)整個集群越大,一次所能處理的Map和Reduce數(shù)越多,該算法的時間復(fù)雜度就越低、效率越高。
Apache的Hadoop是MapReduce的開源實(shí)現(xiàn)。本文實(shí)驗(yàn)采用Hadoop平臺0.20.2,每個節(jié)點(diǎn)上可并行運(yùn)行的Mapper數(shù)和Reducer數(shù)設(shè)為5,其它采用默認(rèn)設(shè)置。
為了進(jìn)行對比實(shí)驗(yàn),本文使用文獻(xiàn)13中使用的環(huán)境:Hadoop集群包括1臺主控節(jié)點(diǎn)和7個計算節(jié)點(diǎn)。每個節(jié)點(diǎn)配置為2quad-core 2.4GHZ CPU,16GB內(nèi)存和167GB的本地存儲磁盤,操作系統(tǒng)為Red Hat EnterpriseLinux 5.5,節(jié)點(diǎn)間通過 10-Giga?bit Infiniband網(wǎng)絡(luò)互聯(lián)。
為驗(yàn)證本文所提算法的性能,選取目前在垂直頻繁樹挖掘算法中應(yīng)用較為廣泛的兩種算法作為對比:并行頻繁項(xiàng)集挖掘算法DVFP算法采用垂直頻繁樹結(jié)構(gòu),通過計算并行和通信并行,在分布式環(huán)境中挖掘效率較高;基于垂直頻繁模式樹帶有負(fù)載均衡的挖掘算法VFP-LBDM算法是改進(jìn)的垂直挖掘算法,根據(jù)節(jié)點(diǎn)的CPU、內(nèi)存、帶寬資源進(jìn)行挖掘任務(wù)劃分,從負(fù)載均衡的角度提高運(yùn)行效率。本文對此兩種算法重新進(jìn)行了實(shí)現(xiàn),在本文實(shí)驗(yàn)環(huán)境下與本文所提算法進(jìn)行實(shí)驗(yàn)對比,實(shí)驗(yàn)數(shù)據(jù)集為UCI的 Poker Hand[14]。
1)不同支持度下執(zhí)行時間的對比。
三個算法分別計算4000000條記錄。支持度小時,例如支持度為5%時,預(yù)剪去的非頻繁樹少,全局頻繁項(xiàng)集較大,因此每個算法的執(zhí)行時間比較多;隨著支持度變大,頻繁項(xiàng)集變小,挖掘速率會加快。MR-VFP算法由于并行化程度高,因此整體執(zhí)行效率比較高,三種算法執(zhí)行時間的對比如圖3所示。
圖3 三種算法在不同支持度下執(zhí)行時間的對比
2)不同數(shù)據(jù)量下執(zhí)行時間的對比。
采用數(shù)據(jù)復(fù)制的方法,將數(shù)據(jù)集擴(kuò)大至200MB、400MB、600MB、800MB、1000MB,在節(jié)點(diǎn)數(shù)為16的條件下進(jìn)行實(shí)驗(yàn)。隨著數(shù)據(jù)規(guī)模增大,MR-VFP算法的MapReduce模式優(yōu)勢越明顯。三種算法執(zhí)行時間的對比如圖4所示。
圖4 三種算法在不同數(shù)據(jù)量下執(zhí)行時間的對比
3)并行化水平對比
本文使用加速比作為體現(xiàn)算法并行化水平的指標(biāo)。隨著節(jié)點(diǎn)數(shù)的增加,MR-VFP算法在時間的減少上具有很好的優(yōu)勢,從而說明本算法具有高效并行性。三種算法并行化水平的對比如圖5所示。
4)可擴(kuò)展性對比
總數(shù)據(jù)量固定的情況下,隨著節(jié)點(diǎn)數(shù)的增加,局部節(jié)點(diǎn)的任務(wù)量減少,局部節(jié)點(diǎn)的有效功率會減少(但因節(jié)點(diǎn)數(shù)增多,整體的效率是升高的),所以節(jié)點(diǎn)平均效率曲線呈下降趨勢。MR-VFP算法是基于MapReduce模式,節(jié)點(diǎn)間呈串行和并行協(xié)同有序運(yùn)行,因此節(jié)點(diǎn)平均效率要比另兩種算法的節(jié)點(diǎn)無序運(yùn)行效率高。在較大數(shù)據(jù)集上,MR-VFP算法的節(jié)點(diǎn)平均效率曲線較為平滑,不會因節(jié)點(diǎn)增加而使性能降低得過快。因此,本文所提算法對于集群計算具有良好的可擴(kuò)展性,三種算法可擴(kuò)展性的對比如圖6所示。
圖6 三種算法節(jié)點(diǎn)平均效率對比
大數(shù)據(jù)環(huán)境下,為使傳統(tǒng)數(shù)據(jù)挖掘算法發(fā)揮功效,本文提出一種基于MapReduce的垂直FP-growth挖掘算法。該算法先用Map函數(shù)對事務(wù)數(shù)據(jù)庫數(shù)據(jù)項(xiàng)進(jìn)行解析分塊;然后用Reduce函數(shù)計算頻繁項(xiàng)的支持度和合并全局頻繁樹,從而并行化垂直FP-growth算法中間迭代過程;最后通過計算全局頻繁項(xiàng),得到準(zhǔn)確的頻繁項(xiàng)集和關(guān)聯(lián)規(guī)則。經(jīng)實(shí)驗(yàn)證明,所提算法在大數(shù)據(jù)處理方面不僅保持原有垂直FP-growth算法挖掘準(zhǔn)確性,而且具有較高的運(yùn)行效率和較好的集群性能。