金英华,张 岩
(沈阳师范大学,沈阳 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.