本發(fā)明實施例涉及計算機技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)媒體、閱讀和購物的普及,在網(wǎng)絡(luò)上通過推薦欄獲取信息已經(jīng)變成很重要和自然的渠道。然而面對上億級別的用戶,上千萬級別的商品,和每天10億級別的pv((page view,頁面瀏覽量),服務(wù)端系統(tǒng)如何針對用戶的行為實時的計算并更新推薦結(jié)果,是目前互聯(lián)網(wǎng)中比較熱門的技術(shù)。
對于電商來說,推薦引擎服務(wù)的是成千上萬家客戶,數(shù)據(jù)量巨大,熱門物品的行為聚集,相似度的計算十分耗時;物品上下架也比較頻繁,推薦結(jié)果需要快速更新。目前,比較較為常用的是數(shù)據(jù)集群的處理方式,其中,數(shù)據(jù)處理主要以MapReduce(編程模型)為主,通過調(diào)用MAP函數(shù)和Reduce函數(shù)對數(shù)據(jù)進行處理。然而,MapReduce對數(shù)據(jù)進行處理時的實時性較差。因此,急需提出一種能夠?qū)Υ髷?shù)據(jù)量進行實時處理的方法。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種數(shù)據(jù)處理方法及裝置,用以解決現(xiàn)有技術(shù)中無法對大數(shù)據(jù)量進行實時處理的問題。
本發(fā)明實施例提供一種數(shù)據(jù)處理方法,包括:
當監(jiān)聽到有新的網(wǎng)絡(luò)數(shù)據(jù)時,將所述新的網(wǎng)絡(luò)數(shù)據(jù)存儲至數(shù)據(jù)源;
采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理,得到數(shù)據(jù)拓撲;
將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果;
將所述處理結(jié)果存入存儲介質(zhì)中。
可選的,上述方法中,所述將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果,得到處理結(jié)果,包括:
根據(jù)預設(shè)的節(jié)點管理策略,從所有的bolt中選出主bolt,剩余bolt作為客體bolt;
按照算法路徑選擇器,在所述客體bolt中選出與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt;
獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù);
將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)按照所述算法需求指定的算法進行歸并處理,得到處理結(jié)果。
可選的,上述方法中,所述獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù),包括:
若所述主bolt與客體bolt在一個單足跳行hop算法路徑上,則所述主bolt向所述客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect;
若所述主bolt與客體bolt在一個跳躍jump算法路徑上,則所述主bolt向所述jump算法路徑中的中間客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt在接收到所述中間客體bolt發(fā)送的所述間接請求reInDirect之后反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect。
可選的,上述方法中,所述將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)按照所述算法需求指定的算法進行歸并處理,得到處理結(jié)果,包括:
若所述算法需求指定的算法為協(xié)同過濾算法CF,則采用如下計算公式將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,為第一數(shù)據(jù)向量、為第二數(shù)據(jù)向量,所述第一數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第一特征屬性的一組數(shù)據(jù)構(gòu)成,所述第二數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第二特征屬性的一組數(shù)據(jù)構(gòu)成,為所述處理結(jié)果;
若所述算法需求指定的算法為廣義線性分類算法LR,則采用如下計算方法將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,(X(i),Y(i))為獲取到的網(wǎng)絡(luò)數(shù)據(jù),θex為參數(shù)對象,θ為所述處理結(jié)果,α為第一預設(shè)系數(shù),δ為第二預設(shè)系數(shù),n為第三預設(shè)系數(shù)。
可選的,上述方法,還包括:
將所述數(shù)據(jù)拓撲中所有主bolt的待發(fā)送直接請求reqDirect的任務(wù)置于第一流量控制窗內(nèi);
從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù)置于所述第二流量控制窗內(nèi),并同時將所述第二流量控制窗內(nèi)的所有待發(fā)送直接請求reqDirect發(fā)出;
若在預設(shè)的阻塞時長內(nèi)接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect,則再從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù),直至所述第一流量控制窗內(nèi)無待選取的任務(wù);
若在預設(shè)的阻塞時長內(nèi)未接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect或接收到部分直接請求reqDirect對應(yīng)的反饋信息retDirect,則將未接收到反饋信息retDirect的直接請求reqDirect重新發(fā)出。
可選的,上述方法中,所述網(wǎng)絡(luò)數(shù)據(jù)中包含有能夠唯一標識數(shù)據(jù)的標識信息;相應(yīng)的,所述方法還包括:
將所述網(wǎng)絡(luò)數(shù)據(jù)中的標識信息進行轉(zhuǎn)換;
相應(yīng)的,所述將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果,具體為:
將所述數(shù)據(jù)拓撲中的各轉(zhuǎn)換后的網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果。
可選的,上述的方法中,所述將所述數(shù)據(jù)存入存儲介質(zhì)中,包括:
將所述數(shù)據(jù)存入分布式存儲數(shù)據(jù)庫HBase和/或Redis。
本發(fā)明還提供了一種數(shù)據(jù)處理裝置,包括:
第一存儲模塊,用于當監(jiān)聽到有新的網(wǎng)絡(luò)數(shù)據(jù)時,將所述新的網(wǎng)絡(luò)數(shù)據(jù)存儲至數(shù)據(jù)源;
第一處理模塊,用于采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理,得到數(shù)據(jù)拓撲;
第二處理模塊,用于將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果;
第二存儲模塊,用于將所述處理結(jié)果存入存儲介質(zhì)中。
可選的,上述的裝置中,所述第二處理模塊,包括:
第一選擇單元,用于根據(jù)預設(shè)的節(jié)點管理策略,從所有的bolt中選出主bolt,剩余bolt作為客體bolt;
第二選擇單元,用于按照算法路徑選擇器,在所述客體bolt中選出與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt;
獲取單元,用于獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù);
歸并單元,用于將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)按照所述算法需求指定的算法進行歸并處理,得到處理結(jié)果。
可選的,上述的裝置中,所述獲取單元,具體用于:
若所述主bolt與客體bolt在一個單足跳行hop算法路徑上,則所述主bolt向所述客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect;
若所述主bolt與客體bolt在一個跳躍jump算法路徑上,則所述主bolt向所述jump算法路徑中的中間客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt在接收到所述中間客體bolt發(fā)送的所述間接請求reInDirect之后反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect。
可選的,上述的裝置中,所述的歸并單元,具體用于:
若所述算法需求指定的算法為協(xié)同過濾算法CF,則采用如下計算公式將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,為第一數(shù)據(jù)向量、為第二數(shù)據(jù)向量,所述第一數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第一特征屬性的一組數(shù)據(jù)構(gòu)成,所述第二數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第二特征屬性的一組數(shù)據(jù)構(gòu)成,為所述處理結(jié)果;
若所述算法需求指定的算法為廣義線性分類算法LR,則采用如下計算方法將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,(X(i),Y(i))為獲取到的網(wǎng)絡(luò)數(shù)據(jù),θex為參數(shù)對象,θ為所述處理結(jié)果,α為第一預設(shè)系數(shù),δ為第二預設(shè)系數(shù),n為第三預設(shè)系數(shù)。
可選的,上述的裝置,還包括:
置入模塊,用于將所述數(shù)據(jù)拓撲中所有主bolt的待發(fā)送直接請求reqDirect的任務(wù)置于第一流量控制窗內(nèi);
第一選取模塊,用于從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù)置于所述第二流量控制窗內(nèi),并同時將所述第二流量控制窗內(nèi)的所有待發(fā)送直接請求reqDirect發(fā)出;
第二選取模塊,用于當在預設(shè)的阻塞時長內(nèi)接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect時,再從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù),直至所述第一流量控制窗內(nèi)無待選取的任務(wù);
重發(fā)模塊,用于當在預設(shè)的阻塞時長內(nèi)未接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect或接收到部分直接請求reqDirect對應(yīng)的反饋信息retDirect時,將未接收到反饋信息retDirect的直接請求reqDirect重新發(fā)出。
可選的,上述的裝置中,所述網(wǎng)絡(luò)數(shù)據(jù)中包含有能夠唯一標識數(shù)據(jù)的標識信息;相應(yīng)的,所述裝置還包括:
轉(zhuǎn)換模塊,用于將所述網(wǎng)絡(luò)數(shù)據(jù)中的標識信息進行轉(zhuǎn)換;
相應(yīng)的,所述第二處理結(jié)果,具體為:
將所述數(shù)據(jù)拓撲中的各轉(zhuǎn)換后的網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果。
可選的,上述的裝置中,所述第二存儲模塊具體用于:將所述數(shù)據(jù)存入分布式存儲數(shù)據(jù)庫HBase和/或Redis。
本發(fā)明實施例提供的數(shù)據(jù)處理方法及裝置,通過實時監(jiān)聽新的網(wǎng)絡(luò)數(shù)據(jù),并在監(jiān)聽到新的網(wǎng)絡(luò)數(shù)據(jù)后將其存儲至數(shù)據(jù)源,以實時的將新的網(wǎng)絡(luò)數(shù)據(jù)進行存儲;采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理得到數(shù)據(jù)拓撲,以將加入了新網(wǎng)絡(luò)數(shù)據(jù)的數(shù)據(jù)拓撲發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,進而實現(xiàn)了數(shù)據(jù)處理的實時性。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1示出了本發(fā)明實施例一提供的數(shù)據(jù)處理方法的流程示意圖;
圖2示出了本發(fā)明實施例提供的獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù)的信息流示意圖;
圖3示出了本發(fā)明實施例提供的流量控制方法示意圖;
圖4示出了本發(fā)明實施例二提供的數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例中涉及到的一些專業(yè)術(shù)語及解釋如下表1所示:
表1為本發(fā)明實施例中涉及到的專業(yè)術(shù)語及解釋
圖1示出了本發(fā)明實施例一提供的數(shù)據(jù)處理方法的流程示意圖。如圖1所示,本發(fā)明實施例一提供的所述方法包括:
步驟101、當監(jiān)聽到有新的網(wǎng)絡(luò)數(shù)據(jù)時,將所述新的網(wǎng)絡(luò)數(shù)據(jù)存儲至數(shù)據(jù)源。
在具體實施時,從異步非阻塞式消息隊列系統(tǒng)kafka消費數(shù)據(jù),例如用戶在電商網(wǎng)站的行為數(shù)據(jù);可使用zookeeper解決分布式算法中配置信息的一致性,控制算法平臺運行狀態(tài)。
步驟102、采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理,得到數(shù)據(jù)拓撲。
在具體實施時,數(shù)據(jù)拓撲是由節(jié)點和節(jié)點之間的關(guān)系串聯(lián)起來。在傳統(tǒng)的商品推薦服務(wù)中,所有的商品和用戶構(gòu)成一個個的節(jié)點;在新媒體領(lǐng)域,文章和讀者、視頻和觀眾等構(gòu)成一個個節(jié)點;再更深的層次,一個個商品的類目,文章,視頻的分類也可以構(gòu)成一個個的節(jié)點。
為了統(tǒng)一的實現(xiàn)編碼,需對這些各個領(lǐng)域內(nèi)獨立的個體或者概念以及他們之間的關(guān)系進行抽象和定義:
對象obj:對象就是所有能在某個領(lǐng)域的某個類型下能用自己的標識id唯一標識自己的節(jié)點的集合。
關(guān)系rel:兩個對象通過某種行為或者邏輯關(guān)聯(lián)起來,例如一個用戶對象瀏覽/購買一個商品對象;一個商品對象歸屬于一個類目對象??梢跃唧w定義為:<主體,關(guān)系,客體>,例如:
<用戶,瀏覽/購買,商品>,<商品,歸屬,類目>。
屬性信息:對象和關(guān)系除了自己的唯一標識信息需要存儲外,可能還有其他的額外信息需要存儲,例如過期時間。
例如,推薦系統(tǒng)的經(jīng)典模型中有兩種元素:用戶(User)和物品(Item)。用戶包含一些相關(guān)的元數(shù)據(jù),包括年齡,性別,種族和其他一些人口統(tǒng)計相關(guān)信息。物品也有一些相關(guān)元數(shù)據(jù),例如描述,價格,重量等。另外用戶和物品之間還會有關(guān)聯(lián)(或交易),例如userA下載或購買了movieB,userX給productY評5分等。
步驟103、將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果。
在具體實施時,本步驟可采用如下方法實現(xiàn):
步驟1031、根據(jù)預設(shè)的節(jié)點管理策略,從所有的bolt中選出主bolt,剩余bolt作為客體bolt。
具體的,bolt中有各自的節(jié)點管理器VertexSuperviser進行管理節(jié)點,VertexSuperviser可按照節(jié)點評分來選擇主節(jié)點。
步驟1032、按照算法路徑選擇器,在所述客體bolt中選出與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt。
步驟1033、獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù)。
若所述主bolt與客體bolt在一個單足跳行hop算法路徑上,則所述主bolt向所述客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect;
若所述主bolt與客體bolt在一個跳躍jump算法路徑上,則所述主bolt向所述jump算法路徑中的中間客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt在接收到所述中間客體bolt發(fā)送的所述間接請求reInDirect之后反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect。
具體的,圖2示出了本發(fā)明實施例提供的獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù)的信息流示意圖。
這里需要說明的是:實時算法平臺Proxima運行于storm實時流式處理組件之上;使用bolt和bolt之間通信來模擬對象與對象之間的請求行為;在bolt中完成算法的計算。由于算法實際上是交換數(shù)據(jù),然后計算,如此循環(huán)往復。數(shù)據(jù)可以單向流動也可以形成閉環(huán),這里涉及到數(shù)據(jù)流動的路徑和計算。數(shù)據(jù)的流動路徑由Path,Hop,Jump來定義;數(shù)據(jù)的計算由Selector和Merger來定義。
路徑Path:兩個有直接聯(lián)系的對象可以直接交換信息,沒有直接聯(lián)系但有間接聯(lián)系的對象之間,可以通過某條路徑,經(jīng)過其它對象間多次直接交換信息而達到間接交換信息。不管直接交換還是間接交換,都會存在對象->關(guān)系類型->對象這樣一條簡單路徑或多條簡單路徑構(gòu)成的復雜路徑,統(tǒng)稱為路徑。例如:對象1和對象3之間通過對象2,并經(jīng)過兩種關(guān)系構(gòu)成了一條復雜路徑(后面稱之為Jump):
<對象1,關(guān)系1,對象2,關(guān)系2,對象3>
Hop:路徑上的基本單位-一個鄰居關(guān)系組成的path,我們稱作為hop,意為單足跳行,可以理解為一跳,意為短路徑。例如對象1和對象2通過關(guān)系1構(gòu)成了一個Hop。
Jump:跟hop的單足跳行相比,jump-跳躍我們定義為有左/右子路徑的長路徑,可以包含兩個hop或者一個hop+一個jump或者兩個jump的長路徑。從定義上我們知道,jump屬于遞歸定義。
選擇器selector:根據(jù)不同的算法,我們可以為hop實現(xiàn)不同的選擇器邏輯,以用來選出不同算法需求的鄰居。Selector在hop的起始對象中計算。
歸并器merger:根據(jù)不同算法,我們?yōu)閖ump實現(xiàn)不同的歸并結(jié)果的邏輯,用來根據(jù)不同算法需求合并左右子路徑的結(jié)果。同樣,merger也是在路徑的起始對象中計算。
步驟1034、將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)按照所述算法需求指定的算法進行歸并處理,得到處理結(jié)果。
若所述算法需求指定的算法為協(xié)同過濾算法CF,則采用如下計算公式將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,為第一數(shù)據(jù)向量、為第二數(shù)據(jù)向量,所述第一數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第一特征屬性的一組數(shù)據(jù)構(gòu)成,所述第二數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第二特征屬性的一組數(shù)據(jù)構(gòu)成,為所述處理結(jié)果;
若所述算法需求指定的算法為廣義線性分類算法LR,則采用如下計算方法將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,(X(i),Y(i))為獲取到的網(wǎng)絡(luò)數(shù)據(jù),θex為參數(shù)對象,θ為所述處理結(jié)果,α為第一預設(shè)系數(shù),δ為第二預設(shè)系數(shù),n為第三預設(shè)系數(shù)。
這里需要補充的是:
對于非參數(shù)類模型,例如CF、Probability graphical model,可以很方便通過計算的分布和信息的交換來達成計算目的。對于參數(shù)類模型,典型的,例如LR算法,可以把參數(shù)本身當成一個對象,參數(shù)的更新同樣可以通過計算的分布和信息的交換來達成。而且,由于天然的分布式,可以很高效的實現(xiàn)基于SGD的參數(shù)優(yōu)化方法。以下是兩種典型模型在本平臺上的實現(xiàn)邏輯。
下面對CF算法和LR算法在本發(fā)明實施例提供的技術(shù)方案中的實現(xiàn)邏輯進行說明:
首先,對所述CF算法的實現(xiàn)邏輯進行說明。
將CF算法的公式進行拆解得到:
上述算式中是商品A(Item A)對象可以本地計算得到的數(shù)據(jù);是商品B(Item B)對象可以本地計算得到的數(shù)據(jù)。具體的,A的評分向量的長度可在Item A對象本地計算完成,B的評分向量的長度可在Item B對象本地計算完成。計算商品A與商品B的相似度,需包含有交換的過程,交換的過程是通過商品A和商品B的共同評分用戶:
商品A的節(jié)點向所述共同評分用戶的節(jié)點發(fā)送獲取商品B的數(shù)據(jù)請求;
商品B的節(jié)點接收到所述數(shù)據(jù)請求后,將商品B的數(shù)據(jù)發(fā)送至所述共同評分用戶的節(jié)點,由所述共同評分用戶的節(jié)點將所述商品B的數(shù)據(jù)轉(zhuǎn)發(fā)至所述商品A的節(jié)點;
商品A的節(jié)點根據(jù)本地計算的商品A的數(shù)據(jù)和接收到的商品B的數(shù)據(jù),計算所述商品A和所述商品B的相似度。
然后,對所述LR算法的實現(xiàn)邏輯進行說明。
1、分布式存儲參數(shù)對象θ和樣本(X,Y);
2、每個樣本對象(X(i),Y(i))在通過通信獲取到參數(shù)對象θ后,計算(logit(θTX(i))-Y(i))X(i),并把結(jié)構(gòu)返回給參數(shù)對象θ;
3、當參數(shù)對象θ收到樣本對象的返回值后,更新θ本身的屬性值,完成一次更新。
步驟104、將所述處理結(jié)果存入存儲介質(zhì)中。
將所述數(shù)據(jù)存入分布式存儲數(shù)據(jù)庫HBase和/或Redis。算法運算中有大量的中間結(jié)果,進行Hbase緩存有利于二次使用和熱啟動算法平臺,減少重新計算等待時間;平臺計算的最終結(jié)果保存在Redis中。
如上計算過程無論是完成一個Hop還是一個Jump,當有輸出結(jié)果配置,會將結(jié)果實時輸出到Redis進行緩存;節(jié)點信息和節(jié)點的算法路徑結(jié)果在滿足條件下,緩存到Hbase中進行備份。
本發(fā)明實施例提供的技術(shù)方案,通過實時監(jiān)聽新的網(wǎng)絡(luò)數(shù)據(jù),并在監(jiān)聽到新的網(wǎng)絡(luò)數(shù)據(jù)后將其存儲至數(shù)據(jù)源,以實時的將新的網(wǎng)絡(luò)數(shù)據(jù)進行存儲;采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理得到數(shù)據(jù)拓撲,以將加入了新網(wǎng)絡(luò)數(shù)據(jù)的數(shù)據(jù)拓撲發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,進而實現(xiàn)了數(shù)據(jù)處理的實時性。
進一步的,本實施例提供的所述方法,還可包括:
將所述數(shù)據(jù)拓撲中所有主bolt的待發(fā)送直接請求reqDirect的任務(wù)置于第一流量控制窗內(nèi);
從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù)置于所述第二流量控制窗內(nèi),并同時將所述第二流量控制窗內(nèi)的所有待發(fā)送直接請求reqDirect發(fā)出;
若在預設(shè)的阻塞時長內(nèi)接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect,則再從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù),直至所述第一流量控制窗內(nèi)無待選取的任務(wù);
若在預設(shè)的阻塞時長內(nèi)未接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect或接收到部分直接請求reqDirect對應(yīng)的反饋信息retDirect,則將未接收到反饋信息retDirect的直接請求reqDirect重新發(fā)出。
通俗的來講:當數(shù)據(jù)大量輸入時,系統(tǒng)物理性能瓶頸會出現(xiàn)通信阻塞,設(shè)計模擬tcp滑動窗口通信,流程:如圖3所示,選擇一批主節(jié)點作為大窗口,在大窗口選定固定數(shù)量消息,放入小窗口中并同時發(fā)送到網(wǎng)絡(luò),當結(jié)果返回從小窗口中移除,如果超過阻塞時間未返回再次發(fā)送小窗中剩余消息,否則就滑動到下個小窗口直至大窗口所有消息發(fā)送完成,最后重新選擇一批主節(jié)點開始整個流程;流程中小窗口重發(fā)可以避免數(shù)據(jù)全部堵塞在網(wǎng)絡(luò)中,每秒進行檢查小窗口情況,網(wǎng)絡(luò)良好的狀況下,可以按照最快的速度發(fā)送,在網(wǎng)絡(luò)差的狀況又能可以在低速情況進行發(fā)送。
進一步的,所述網(wǎng)絡(luò)數(shù)據(jù)中包含有能夠唯一標識數(shù)據(jù)的標識信息;相應(yīng)的,所述方法還包括:
將所述網(wǎng)絡(luò)數(shù)據(jù)中的標識信息進行轉(zhuǎn)換;
相應(yīng)的,所述將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果,具體為:
將所述數(shù)據(jù)拓撲中的各轉(zhuǎn)換后的網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果。
在現(xiàn)實中商品的id和用戶id等信息的字符多樣,數(shù)據(jù)漲到上億級別時候,隨之算法平臺存儲長id,將長id在網(wǎng)絡(luò)中通信就會變成負擔;而在分布系統(tǒng)中維護全局的唯一性轉(zhuǎn)換id非常困難,恰好可以使用MR的id分發(fā)的特性,在bolt維護Id唯一和自增長,在輸出的時候在進行統(tǒng)一轉(zhuǎn)換。
本發(fā)明的具體實施過程包括兩個過程,一個為實時算法平臺運行環(huán)境storm集群,一個為實時算法平臺的實施,以下分別對兩個實施過程進行詳細描述。
storm集群的實施步驟為:
第一步,在3臺或者以上機器上面部署storm的環(huán)境和程序;
第二步,啟動每臺機器上面的storm程序,保證可以運行Topology作業(yè)運行;
實時算法平臺的實施步驟為:
第一步,上傳配置文件和實時平臺的jar包程序到storm的一臺機器中;
第二步,基本參數(shù)配置Kafka數(shù)據(jù)源、Hbase緩存配置、結(jié)果輸出的Redis的對應(yīng)IP配置;實時算法平臺的在集群中并行接入數(shù)據(jù)源個數(shù)和并行算法計算個數(shù),數(shù)據(jù)流按字段切分方式設(shè)置;數(shù)據(jù)流抽取對象Objs和關(guān)系Rels字段和生命周期;
第三步,配置算法模塊:選擇器Selector的行為分值對應(yīng)的實現(xiàn)接口的類、歸并器Merger的實現(xiàn)接口的類;算法計算的路徑Paths和路徑使用到對應(yīng)的Selector和Merger、路徑通信的衰減比例;
第四步,對應(yīng)推薦系統(tǒng)需要配置Recommendation包括推薦使用的算法路徑、輸出的規(guī)則等;
第五步,實時平臺jar以配置文件為輸入的Topology作業(yè)提交到storm中運行。
需要說明的是:對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
圖4示出了本發(fā)明實施例二提供的數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。如圖4所示,本實施例提供的所述裝置,包括:
第一存儲模塊10用于當監(jiān)聽到有新的網(wǎng)絡(luò)數(shù)據(jù)時,將所述新的網(wǎng)絡(luò)數(shù)據(jù)存儲至數(shù)據(jù)源;
第一處理模塊20用于采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理,得到數(shù)據(jù)拓撲;
第二處理模塊30用于將所述數(shù)據(jù)拓撲中的各網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果;
第二存儲模塊40用于將所述處理結(jié)果存入存儲介質(zhì)中。
本發(fā)明實施例提供的技術(shù)方案,通過實時監(jiān)聽新的網(wǎng)絡(luò)數(shù)據(jù),并在監(jiān)聽到新的網(wǎng)絡(luò)數(shù)據(jù)后將其存儲至數(shù)據(jù)源,以實時的將新的網(wǎng)絡(luò)數(shù)據(jù)進行存儲;采用流式計算框架storm將所述數(shù)據(jù)源中的網(wǎng)絡(luò)數(shù)據(jù)進行拓撲處理得到數(shù)據(jù)拓撲,以將加入了新網(wǎng)絡(luò)數(shù)據(jù)的數(shù)據(jù)拓撲發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,進而實現(xiàn)了數(shù)據(jù)處理的實時性。
這里需要說明的是:本實施例提供的所述數(shù)據(jù)處理裝置可是實現(xiàn)上述方法實施例提供的數(shù)據(jù)處理方法,具體的實現(xiàn)過程可參見上述實施例中的相應(yīng)內(nèi)容,此處不再贅述。
進一步的,本實施例提供的所述第二處理模塊,包括:
第一選擇單元,用于根據(jù)預設(shè)的節(jié)點管理策略,從所有的bolt中選出主bolt,剩余bolt作為客體bolt;
第二選擇單元,用于按照算法路徑選擇器,在所述客體bolt中選出與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt;
獲取單元,用于獲取所有與所述主bolt在同一算法路徑,且具有相同算法需求的客體bolt的網(wǎng)絡(luò)數(shù)據(jù);
歸并單元,用于將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)按照所述算法需求指定的算法進行歸并處理,得到處理結(jié)果。
進一步的,上述的獲取單元,具體用于:
若所述主bolt與客體bolt在一個單足跳行hop算法路徑上,則所述主bolt向所述客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect;
若所述主bolt與客體bolt在一個跳躍jump算法路徑上,則所述主bolt向所述jump算法路徑中的中間客體bolt發(fā)送直接請求reqDirect,并接收所述客體bolt在接收到所述中間客體bolt發(fā)送的所述間接請求reInDirect之后反饋的攜帶有網(wǎng)絡(luò)數(shù)據(jù)的反饋信息retDirect。
進一步的,上述的裝置中,所述的歸并單元,具體用于:
若所述算法需求指定的算法為協(xié)同過濾算法CF,則采用如下計算公式將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,為第一數(shù)據(jù)向量、為第二數(shù)據(jù)向量,所述第一數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第一特征屬性的一組數(shù)據(jù)構(gòu)成,所述第二數(shù)據(jù)向量是由獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)中具有相同的第二特征屬性的一組數(shù)據(jù)構(gòu)成,為所述處理結(jié)果;
若所述算法需求指定的算法為廣義線性分類算法LR,則采用如下計算方法將獲取到的所有網(wǎng)絡(luò)數(shù)據(jù)進行歸并處理,得到處理結(jié)果:
其中,(X(i),Y(i))為獲取到的網(wǎng)絡(luò)數(shù)據(jù),θex為參數(shù)對象,θ為所述處理結(jié)果,α為第一預設(shè)系數(shù),δ為第二預設(shè)系數(shù),n為第三預設(shè)系數(shù)。
進一步的,上述的裝置,還可包括:
置入模塊,用于將所述數(shù)據(jù)拓撲中所有主bolt的待發(fā)送直接請求reqDirect的任務(wù)置于第一流量控制窗內(nèi);
第一選取模塊,用于從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù)置于所述第二流量控制窗內(nèi),并同時將所述第二流量控制窗內(nèi)的所有待發(fā)送直接請求reqDirect發(fā)出;
第二選取模塊,用于當在預設(shè)的阻塞時長內(nèi)接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect時,再從所述第一流量控制窗內(nèi)選取預設(shè)固定數(shù)量的任務(wù),直至所述第一流量控制窗內(nèi)無待選取的任務(wù);
重發(fā)模塊,用于當在預設(shè)的阻塞時長內(nèi)未接收到所有直接請求reqDirect對應(yīng)的反饋信息retDirect或接收到部分直接請求reqDirect對應(yīng)的反饋信息retDirect時,將未接收到反饋信息retDirect的直接請求reqDirect重新發(fā)出。
進一步的,上述的裝置中,所述網(wǎng)絡(luò)數(shù)據(jù)中包含有能夠唯一標識數(shù)據(jù)的標識信息;相應(yīng)的,所述裝置還包括:
轉(zhuǎn)換模塊,用于將所述網(wǎng)絡(luò)數(shù)據(jù)中的標識信息進行轉(zhuǎn)換;
相應(yīng)的,所述第二處理結(jié)果,具體為:
將所述數(shù)據(jù)拓撲中的各轉(zhuǎn)換后的網(wǎng)絡(luò)數(shù)據(jù)發(fā)射至storm中對應(yīng)的數(shù)據(jù)操作節(jié)點bolt中進行處理,得到處理結(jié)果。
進一步的,上述的裝置中,所述第二存儲模塊具體用于:將所述數(shù)據(jù)存入分布式存儲數(shù)據(jù)庫HBase和/或Redis。
以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在計算機可讀存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個實施例或者實施例的某些部分所述的方法。
最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。