金英華,張 巖
(沈陽師范大學,沈陽 110034)
在近些年的開源云平臺中,Hadoop平臺可以算是最為成功的、也是接受度最為廣泛的云平臺技術框架,在一定程度上,它也已成為了一種在大數據處理事實上的行業標準,得到了IT業界的廣泛認可。
Hadoop平臺在性能和功能方面也有其不足之處,其發展的歷程也是其進行不斷改進歷程,在2007年首個版本推出以來,其發布的版本數量目前已經達到數十個版本。Hadoop的設計目標最初是面對高吞吐率的離線批處理的,以及其自身在系統構架的設計上有很多先天性的不足,盡管大批的Hadoop支持者在開源社區里,一直致力于在程序源碼和系統結構上地不斷改進,還有就是在作業的執行響應上性能低而難以去滿足高效的實時低延遲查詢分析的數據處理需求,MapReduce模型框架的靈活度不高難以提供更靈活的編程能力、對迭代計算、流式計算、圖計算等支持度不高。
物流平臺的WEB架構,采用負載均衡加應用集群結構進行并發和高可用的擴展設計,其整體的功能框架如圖1所示。

圖1 平臺架構圖
WEB平臺系統代碼的軟件開發框架采用java web技術中成熟的SSI框架,進行模塊化擴展模式開發,主要的功能模塊包括了GPS應用服務、移動WEB服務、網站WEB服務等。同時對第三方服務進行接入,功能模塊之間開放接口進行通信交互,數據接口層對SpringDAO和IBatis進行封裝設計,后臺的關系型數據庫以Oracle11g為主體,非關系型數據庫MongoDB為輔,數據的容災方案采用DataGuard技術。
以MapReduce編程模型實現的基于項目的協同過濾算法的偽代碼如下所示:
第一步:數據讀入,從HDFS讀入本地文件;
第二步:循環讀取每行數據,以固定字符串將每行數據進行分割,生成列表項,數據格式為<用戶:[項目:評分]>,MapReduce模型
下每個列表項可以直接插入Hadoop平臺的上下文Context中;
for rowdata in Text
Split(rowdata,“ ”or “->”);
Key——>[userid];
Value——>[itemid]:[rate];
Context.writer(Key,Value); End for
第三步:以貨主ID為Key,合并列表項;
Listitem = NULL;
Listitem.insert(Key);
Listitem(Key).insert(Value);
//ListKey=userid:ListValue——>List([itemid]:[rate])
第四步:對Item各項計算,構造同現矩陣;
Co-martrix(list MapList){
For item in Maplist
If not null(item)
ItemSum = ItemSum+1;
Updatemartrix(Item);
EndIf EndFor}
第五步:以userid為Key,進行列表項的合并,生成用戶的項目評價向量來自Map階段的初步合并后的列表項,在Reduce階段,用List列表保存各個用戶的項目評價向量。
若已存在,以Key為唯一鍵值進行合;
If Key in Uservector.key
Uservector(key).Merge(Listitem);
若不存在這樣的Key,則直接在列表中新增加一個列表項,鍵值為Key;
Else New Uservector(key).add(Listitem);
第六步:用戶項目評價向量與同現矩陣相乘,得到用戶的推薦向量;
UserRecommendList = Uservector * Co-martrix;
Save(UserRecommendList);
最后,為物流平臺選取K個推薦向量;
GetItemOfRem(UserRecommendList,K)。
推薦算法的實現,研發的測試環境中運行的效果運用到物流工作中非常方便。當貨主企業用戶登陸后,在找專線的頻道內系統為用戶推薦多家感興趣的物流公司,以圖文字形式進行展示,一目了然,非常容易就找到所需的內容。
[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著.范明,范宏建等譯.數據挖掘導論[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.