金英華,張 巖
(沈陽(yáng)師范大學(xué),沈陽(yáng) 110034)
在近些年的開源云平臺(tái)中,Hadoop平臺(tái)可以算是最為成功的、也是接受度最為廣泛的云平臺(tái)技術(shù)框架,在一定程度上,它也已成為了一種在大數(shù)據(jù)處理事實(shí)上的行業(yè)標(biāo)準(zhǔn),得到了IT業(yè)界的廣泛認(rèn)可。
Hadoop平臺(tái)在性能和功能方面也有其不足之處,其發(fā)展的歷程也是其進(jìn)行不斷改進(jìn)歷程,在2007年首個(gè)版本推出以來(lái),其發(fā)布的版本數(shù)量目前已經(jīng)達(dá)到數(shù)十個(gè)版本。Hadoop的設(shè)計(jì)目標(biāo)最初是面對(duì)高吞吐率的離線批處理的,以及其自身在系統(tǒng)構(gòu)架的設(shè)計(jì)上有很多先天性的不足,盡管大批的Hadoop支持者在開源社區(qū)里,一直致力于在程序源碼和系統(tǒng)結(jié)構(gòu)上地不斷改進(jìn),還有就是在作業(yè)的執(zhí)行響應(yīng)上性能低而難以去滿足高效的實(shí)時(shí)低延遲查詢分析的數(shù)據(jù)處理需求,MapReduce模型框架的靈活度不高難以提供更靈活的編程能力、對(duì)迭代計(jì)算、流式計(jì)算、圖計(jì)算等支持度不高。
物流平臺(tái)的WEB架構(gòu),采用負(fù)載均衡加應(yīng)用集群結(jié)構(gòu)進(jìn)行并發(fā)和高可用的擴(kuò)展設(shè)計(jì),其整體的功能框架如圖1所示。
圖1 平臺(tái)架構(gòu)圖
WEB平臺(tái)系統(tǒng)代碼的軟件開發(fā)框架采用java web技術(shù)中成熟的SSI框架,進(jìn)行模塊化擴(kuò)展模式開發(fā),主要的功能模塊包括了GPS應(yīng)用服務(wù)、移動(dòng)WEB服務(wù)、網(wǎng)站W(wǎng)EB服務(wù)等。同時(shí)對(duì)第三方服務(wù)進(jìn)行接入,功能模塊之間開放接口進(jìn)行通信交互,數(shù)據(jù)接口層對(duì)SpringDAO和IBatis進(jìn)行封裝設(shè)計(jì),后臺(tái)的關(guān)系型數(shù)據(jù)庫(kù)以O(shè)racle11g為主體,非關(guān)系型數(shù)據(jù)庫(kù)MongoDB為輔,數(shù)據(jù)的容災(zāi)方案采用DataGuard技術(shù)。
以MapReduce編程模型實(shí)現(xiàn)的基于項(xiàng)目的協(xié)同過(guò)濾算法的偽代碼如下所示:
第一步:數(shù)據(jù)讀入,從HDFS讀入本地文件;
第二步:循環(huán)讀取每行數(shù)據(jù),以固定字符串將每行數(shù)據(jù)進(jìn)行分割,生成列表項(xiàng),數(shù)據(jù)格式為<用戶:[項(xiàng)目:評(píng)分]>,MapReduce模型
下每個(gè)列表項(xiàng)可以直接插入Hadoop平臺(tái)的上下文Context中;
for rowdata in Text
Split(rowdata,“ ”or “->”);
Key——>[userid];
Value——>[itemid]:[rate];
Context.writer(Key,Value); End for
第三步:以貨主ID為Key,合并列表項(xiàng);
Listitem = NULL;
Listitem.insert(Key);
Listitem(Key).insert(Value);
//ListKey=userid:ListValue——>List([itemid]:[rate])
第四步:對(duì)Item各項(xiàng)計(jì)算,構(gòu)造同現(xiàn)矩陣;
Co-martrix(list MapList){
For item in Maplist
If not null(item)
ItemSum = ItemSum+1;
Updatemartrix(Item);
EndIf EndFor}
第五步:以u(píng)serid為Key,進(jìn)行列表項(xiàng)的合并,生成用戶的項(xiàng)目評(píng)價(jià)向量來(lái)自Map階段的初步合并后的列表項(xiàng),在Reduce階段,用List列表保存各個(gè)用戶的項(xiàng)目評(píng)價(jià)向量。
若已存在,以Key為唯一鍵值進(jìn)行合;
If Key in Uservector.key
Uservector(key).Merge(Listitem);
若不存在這樣的Key,則直接在列表中新增加一個(gè)列表項(xiàng),鍵值為Key;
Else New Uservector(key).add(Listitem);
第六步:用戶項(xiàng)目評(píng)價(jià)向量與同現(xiàn)矩陣相乘,得到用戶的推薦向量;
UserRecommendList = Uservector * Co-martrix;
Save(UserRecommendList);
最后,為物流平臺(tái)選取K個(gè)推薦向量;
GetItemOfRem(UserRecommendList,K)。
推薦算法的實(shí)現(xiàn),研發(fā)的測(cè)試環(huán)境中運(yùn)行的效果運(yùn)用到物流工作中非常方便。當(dāng)貨主企業(yè)用戶登陸后,在找專線的頻道內(nèi)系統(tǒng)為用戶推薦多家感興趣的物流公司,以圖文字形式進(jìn)行展示,一目了然,非常容易就找到所需的內(nèi)容。
[1]Chert MS.Data mining:arl overview from a database perspective[J].IEEE Trans on Knowledgeand data engineering,1996:8(06):866-883.
[2]Pang-Ning Tan,Michael Steinbach,Yipin Kumar著.范明,范宏建等譯.數(shù)據(jù)挖掘?qū)д揫M].北京:人民郵電出版社,2006.
[3]Leandro Nunesde Castro,Fernando J.Von Zuben.An Evolutionary Immune Network for DataClustering.In Proc of the IEEE SBRN(Brazilian Symposium on Artificial Neural Networks).22-25 November 2000.84-89.