本發(fā)明涉及機器學習算法處理領域,尤其涉及基于FPGA的FP-Growth算法的改進方法及裝置。
背景技術:
基于Spark平臺的FP-Growth算法采用MapReduce分布式計算模型、立足于內存計算,實現了該算法的并行化,在一定程度上提升了該算法的挖掘效率;然而隨著大數據時代的到來,科學和工程計算領域的數據量急劇增長,計算復雜度不斷增加,給基于Spark平臺的FP-Growth算法的計算性能帶來了極大挑戰(zhàn)。由于單節(jié)點處理能力有限,Spark通過擴展集群節(jié)點規(guī)模來實現算法性能的提升;而這種集群擴展不僅使得系統(tǒng)成本和能耗快速增加,而且使得集群網絡復雜度和節(jié)點間的數據傳輸開銷急劇上升,降低了集群擴展帶來的計算性能增益。如何才能解決上述問題,增強單節(jié)點處理能力、進而減少計算集群快速擴張帶來的網絡傳輸開銷,最終實現FP-Growth算法的性能提升成為亟待解決的熱點問題。
技術實現要素:
本發(fā)明提供的基于FPGA的FP-Growth算法的改進方法及裝置,克服了現有技術中存在的不足,顯著的提升了FP-Growth算法的計算性能。
為了達到上述目的,本發(fā)明是通過以下技術方案實現的:
本發(fā)明提供一種基于FPGA的FP-Growth算法的改進方法,包括以下步驟:
掃描Spark集群中的數據庫,獲取頻繁項集;
將頻繁項集進行分組;
為Spark集群中的每個節(jié)點加配一塊FPGA板卡;
在FPGA板卡上對每一組的頻繁項集建FP樹;
在FPGA板卡上對每一組建的FP樹進行遞歸挖掘;
將每一組遞歸挖掘的結果進行合并。
進一步地,將頻繁項集進行分組,包括:
將其按頻繁1-項集順序遞減排列;
根據數據庫的大小確定分組個數,按照預先設定的分組規(guī)則將其分為若干組。
進一步地,在FPGA板卡對每一組建FP樹,包括:
建立一個根節(jié)點為NULL的FP樹和一個存儲節(jié)點信息的Tab表;
將頻繁項表中的每條處理好的事務中的數據項按降序依次插入到FP樹中,構建出FP樹的一條路徑;
在上述的插入過程中,同時用Tab的指針指向對應項的節(jié)點,并將每個節(jié)點的計數增加1。
進一步地,在FPGA板卡對每一組建的FP樹進行遞歸挖掘,包括:
A:從Tab表的尾部的項開始向上遍歷FP樹,每次遍歷得到該項的條件模式基;
B:將其條件模式基轉化為條件FP樹;
C:迭代重復步驟A步驟B,直到FP樹包含一個元素項為止。
進一步地,將每一組遞歸挖掘的結果進行合并,包括:
將每一棵條件FP樹生成所有的從根節(jié)點到葉子節(jié)點的路徑,由路徑中的集合生成其所有的非空子集。
基于上述的任一項一種基于FPGA的FP-Growth算法的改進方法的一種基于FPGA的FP-Growth算法的改進裝置,包括:
獲取模塊,用于掃描Spark集群中的數據庫,獲取頻繁項集;
分組模塊,用于將頻繁項集進行分組;
板卡模塊,用于為Spark集群中的每個節(jié)點加配一塊FPGA板卡;
建樹模塊,用于在FPGA板卡上對每一組的頻繁項集建FP樹;
挖掘樹模塊,用于在FPGA板卡上對每一組建的FP樹進行遞歸挖掘;
結果模塊,用于將每一組遞歸挖掘的結果進行合并。
本發(fā)明所提供的一種基于FPGA的FP-Growth算法的改進方法,具有如下優(yōu)點:
1.本發(fā)明通過在原有Spark集群的基礎上加配FPGA,為每個集群節(jié)點增加一塊FPGA板卡,由于FPGA板卡具有高性能、低功耗、易編程、動態(tài)可重構等突出優(yōu)勢,是一種新型的異構計算加速器件,將FPGA板卡與原有節(jié)點組成新的Spark集群節(jié)點服務于整個Spark集群,來提高集群單節(jié)點的計算能力,同時保留了Spark集群自身的并行計算框架,有效提高了大數據環(huán)境下FP-Growth算法的整體性能,且FPGA作為加速設備與CPU相配合形成異構計算平臺,能夠有效的提升Spark集群的綜合性能;
2.本發(fā)明將FPGA與Spark相結合,將算法中最耗時、計算量最大的建樹與挖掘樹部分從Spark源碼中抽離并在FPGA上開發(fā)實現并優(yōu)化,而算法的其他部分如數據分組、挖掘結果綜合等計算量較小的部分仍按照Spark原有機制運行,充分發(fā)揮二者優(yōu)勢,并在此基礎上對FP-Growth算法進行優(yōu)化改進,有效的提升FP-Growth算法的計算性能。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例。
圖1為本發(fā)明實施例1基于FPGA的FP-Growth算法的改進方法的流程示意圖之一。
圖2為本發(fā)明實施例2基于FPGA的FP-Growth算法的改進方法的流程示意圖之二。
圖3為本發(fā)明實施例3基于FPGA的FP-Growth算法的改進裝置的結構示意圖。
具體實施方式
下面對本發(fā)明中涉及到的一些技術詞語進行解釋:
頻繁項:在多個集合中,頻繁出現的元素/項。
頻繁項集:一系列集合,這些集合有些相同的元素,集合中同時出現頻率高的元素形成一個子集,滿足一定閾值條件的項集。
條件模式基:同一個頻繁項在FP樹中的所有節(jié)點的祖先路徑的集合。
Spark:是通用并行框架,啟用了內存分布數據集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負載,擁有Hadoop MapReduce所具有的優(yōu)點;但不同于MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS。
FPGA: 英文全稱為Field-Programmable Gate Array,即現場可編程門陣列,它是一種邏輯器件,是在PAL、GAL、CPLD等可編程器件的基礎上進一步發(fā)展的產物。
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
下面結合附圖和實施例對本發(fā)明進行詳細的描述。
實施例1
參考圖1,本發(fā)明的一種基于FPGA的FP-Growth算法的改進方法,包括以下步驟:
S101:掃描Spark集群中的數據庫,獲取頻繁項集;
S102:將頻繁項集進行分組;
S103:為Spark集群中的每個節(jié)點加配一塊FPGA板卡;
S104:在FPGA板卡上對每一組的頻繁項集建FP樹;
S105:在FPGA板卡上對每一組建的FP樹進行遞歸挖掘;
S106:將每一組遞歸挖掘的結果進行合并。
實施例2
參考圖2,本發(fā)明的一種基于FPGA的FP-Growth算法的改進方法,包括以下步驟:
S201:掃描Spark集群中的數據庫,獲取頻繁項集;
S202:將其按頻繁1-項集順序遞減排列;
S203:根據數據庫的大小確定分組個數,按照預先設定的分組規(guī)則將其分為若干組;
S204:為Spark集群中的每個節(jié)點加配一塊FPGA板卡;
S205:建立一個根節(jié)點為NULL的FP樹和一個存儲節(jié)點信息的Tab表;
S206:將頻繁項表中的每條處理好的事務中的數據項按降序依次插入到FP樹中,構建出FP樹的一條路徑;
S207:在上述的插入過程中,同時用Tab的指針指向對應項的節(jié)點,并將每個節(jié)點的計數增加1;
S208:從Tab表的尾部的項開始向上遍歷FP樹,每次遍歷得到該項的條件模式基;
S209:將其條件模式基轉化為條件FP樹;
S210:迭代重復步驟S208、步驟S209,直到FP樹包含一個元素項為止;
S211:將每一棵條件FP樹生成所有的從根節(jié)點到葉子節(jié)點的路徑,由路徑中的集合生成其所有的非空子集。
實施例3
參考圖3,本發(fā)明的基于FPGA的FP-Growth算法的改進裝置,包括:獲取模塊101,分組模塊102,板卡模塊103,建樹模塊104,挖掘樹模塊105和結果模塊106;所述的獲取模塊101依次連接分組模塊102、板卡模塊103、建樹模塊104、挖掘樹模塊105和結果模塊106。
獲取模塊101用于掃描Spark集群中的數據庫,獲取頻繁項集;分組模塊102用于將頻繁項集進行分組;板卡模塊103用于為Spark集群中的每個節(jié)點加配一塊FPGA板卡;建樹模塊104用于在FPGA板卡上對每一組的頻繁項集建FP樹;挖掘樹模塊105用于在FPGA板卡上對每一組建的FP樹進行遞歸挖掘;結果模塊106用于將每一組遞歸挖掘的結果進行合并。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到各種等效的修改或替換,這些修改或替換都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以權利要求的保護范圍為準。