基于hadoop的电影推荐系统研究与实现


ResearchandImplementationofMovieRecommendationSystemBasedonHadoopAThesisSubmittedtoNanjingNormalUniversityFortheDegreeofMasterofEngineeringBYXuefengHuangSupervisedbyAssociateProfessor.XiaojunQianSchoolofComputerScienceandTechnologyNanjingNormalUniversityApril2015 学位论文独创性声讨IIIIIIIIIzllllll墨lllM56IIIll8lllll9/llllUl学位论文作者签名:黄掌呼日期:妒侈-多·研学位论文使用授权声明研究生在校攻读学位期间论文工作的知识产权单位属南京师范大学。学校有权保存本学位论文的电子和纸质文档,可以借阅或上网公布本学位论文的部分或全部内容,可以采用影印、复印等手段保存、汇编本学位论文。学校可以向国家有关机关或机构送交论文的电子和纸质文档,允许论文被查阅和借阅。(保密论义在解密后遵守此规定)保密论文注释:本学位论文属于保密论文,密级:公珏保密学位论文作者签名:黄’獬日期:嬲、纠 摘要摘要随着互联网技术的发展,人们可以在互联网上购买各种商品,完成各种商务活动,越来越依赖于从网络中获取需要的信息,淘宝网仅在2014年双十一就达到了591亿的销量。但是,互联网的飞速发展也给服务提供商带来了许多问题亟需解决,如让用户从海量数据中实现按需提取,为用户提供个性化的服务,带给用户更好的体验,从而产生更多的收益,应用推荐系统是一种较好解决方案。然而,中小型企业使用的推荐系统基于单机模式的简单关联的算法,效果一般且无法处理海量数据,同时存在缺少精通分布式平台处理海量数据人员的问题,这些都给实现分布式的推荐系统带来了很大的技术挑战。因此,为了扩展推荐系统的应用需求,本文以实际出发,实现了一种适用于中小型企业的快速搭建基于Hadoop的分布式推荐平台的方法,降低了推荐系统的应用平台。本文以实现电影推荐系统为例,首先介绍了Hadoop平台中的两大核心内容HDFS和MapReduce。系统选择HDFS这样一种具有高度容错性的分布式文件系统作为底层文件系统,将其部署到廉价的集群中,同时选择MapReduce作为海量数据处理工具。然后介绍了本课题所用的WEB框架--SpringMVC,它具有灵活易用、逻辑清楚等优点,MVC的三层结构设计也为推荐系统提供了良好的接口。推荐算法能够帮助用户发现可能感兴趣的内容。本文重点研究了基于内容的推荐算法、基于关联规则的推荐算法和协同过滤推荐算法。对比三个算法后,选用协同过滤推荐算法中基于项目的协同过滤算法。由于传统的基于项目的协同过滤算法是基于单机模式的,无法运行于Hadoop,本文将它改进成基于并行化的协同过滤算法,并运用到基于Hadoop的电影推荐系统中。基于Hadoop的电影推荐系统的实现主要围绕系统目标确立、需求分析、系统设计、实现与测试等几个部分展开。完成了Hadoop平台和SpringMVC环境的搭建,并基于推荐模块、用户交互模块和分布式模块的三大模块进行详细设计与实现。通过对系统的测试和实验的分析,表明基于Hadoop的电影推荐系统在功能上和并发性上都有很好的效果,能够满足中小型企业对个性化推荐系统的需求。关键词:推荐系统,Hadoop,SpringMVC,系统设计 AbstractAbstractWiththedevelopmentofInternettechnology,peoplecanpurchaseawidevarietyofgoods,completeavarietyofbusinessactivities,andtheyincreasinglydependentontheneedforgoodsfromthenetwork,suchasTaobaoreached59.1billionin2014doubletenthsales.But,therapiddevelopmentofIntemethasbroughtmanyproblemstobesolved,suchashowtoextractthedatafromhugeamountsofdata,howtoprovideuserswithpersonalizedservice,howtogivetheusersabetterexperience,SOastogeneratemorerevenue,usingrecommendationsystemisoneofthebestmethods.However,smallandmediumcompanieswhichuserecommendationsystemarejustbasedonthesimplecorrelationalgorithmofstand—alonemode,ithasacommoneffectandunabletohandlehugeamountsofdata.Atthesametime,smallandmediumcompaniesexisttheproblemofshortageofstaif,SOtheycannotprocesshugeamountsofdata.Allofthesehavebroughtalotoftechnicalchallengesforthemtoimplementdistributedrecommendationsystem.Therefore,inordertoexpandtheapplicationdemandofrecommendersystems,thistopictakesmovierecommendationforexample,proposesarapidmethodofdistributedrecommendationbasedonHadoopplatform,whichcanbeappliedtosmallbusinessenvironment,andreducestheapplicationrequirementofrecommendationsystem.Thisthesistokeamovierecommendersystemasanexample.Atfirst,thisthesiscriticallystudied,researchedthetwocorecontentsintheHadoopplatform--HDFSandMapReduce.Andwechoosehadoopdistributedfilesystemastheunderlyingfilesystem,HDFShashighfaulttolerance,andcanbedeployedtocheapclusterandchoosetheMapReduceasthemassdataprocessingt001.Atthesametime,thisthesisanalysedthesubjectoftheWEBframework--SpringMVC,SpringMVChasalotofadvantagessuchaseasy-to—usefeature,clearlogic.ThethreelayerstructureforMVCprovidesagoodinterfaceforrecommendationsystem.Recommendationalgorithmcanhelpuserstofindthattheymaybeinterestedin.Thisthesismainlystudiedtherecommendationalgorithmbasedonthecontent,therecommendationalgorithmbasedOnassociationrulesandthecollaborativefilteringrecommendationalgorithm.Amongthem,collaborativefilteringrecommendationalgorithmisthemostpopularoneandithasthebettereffectcomparedwiththeothertwoalgorithms.Wemodifieditintoparallelcollaborativefilteringalgorithm,andappliedittomovieII recommendationsystembasedonHadoop·ToimplementmovierecommendationsystembasedonHadoopwillcenteronseVeraIDartsassystemgoalsestablished,requirementanalysis,systemdesign,implementatlonandtesting.CompletedtheconstructionoftheHadoopplatformandSpringMVCenvironment,designedandimplementedthefivemodulesincludingthedatacollectionmoduIe,recommendationenginemodule,resultsprocessingmodule,userinteractionmodUleanddistributedmodule.Throughthesystemtest,theresultshowsthatthemoVlerecommendationsystembasedonHadoophasagoodeffectonthefunction,canmeettheneedsofsmallandmediumcompaniesforthepersonalizedrecommendationsystem·Keywords:RecommendationSystem,Hadoop,SpringMVC,SystemdesignIII 目录目录摘要⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.IAbstract⋯.⋯⋯⋯⋯⋯⋯⋯⋯⋯.⋯⋯⋯⋯⋯⋯⋯⋯..⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.⋯⋯⋯⋯..II目录⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.IV第l章绪论⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.11.1课题研究背景⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯11.2课题研究意义⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯11.3课题研究现状⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.31.3.1国外研究现状⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.31.3.2国内研究现状⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.41.4论文结构⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.4第2章Hadoop平台和SpringMVC框架⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯62.1Hadoop平台⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯62.1.1Hadoop简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯62.1.2HDFS简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯62.1.3HDFS的数据操作⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯82.1.4MapReduce计算流程⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..92.1.5MapReduce工作机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯102.2SpringMVC框架⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一112.2.1WEB服务⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..112.2.2MVC设计模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一122.2.3SpringMVC框架⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯132.3其他⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..142.3.1MySQL⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.⋯⋯⋯⋯⋯⋯.⋯⋯.⋯⋯⋯⋯⋯⋯⋯⋯..142.:;.2Tomcat⋯⋯⋯⋯⋯⋯⋯.⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.⋯.⋯⋯...152.4本章小结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..15第3章推荐系统理论研究⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯163.1基于内容的推荐⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..163.2基于关联规则的推荐⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..183.3协同过滤推荐⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯193.4算法选用⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一25IV 目录3.4.1基于内容推荐优缺点⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.⋯⋯⋯⋯⋯⋯..253.4.2基于关联规则推荐优缺点⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯253.4.3基于协同过滤优缺点⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯253.5基于项目的协同过滤并行化⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..263.6本章小结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一27第4章系统需求与设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯284.1电影推荐系统的系统目标⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..284.2需求分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..284.2.1需求结构⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯284.2.2业务需求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯294.2.3其他需求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3l4.3数据库设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..324.3.1逻辑设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯324.3.2表设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯334.5系统设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..354.6功能模块的划分⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..364.6.1推荐模块设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯364.6.2用户交互模块设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯374.6.3分布式系统模块设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯374.7本章小结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一38第5章实现与测试⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯395.1系统环境搭建⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..395.1.1SpringMVC环境搭建⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯395.1.2Hadoop环境搭建⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..425.1.3自动安装脚本实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯465-2系统功能实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..485.2.1推荐算法实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯485.2.2用户相关模块实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯515.2.3分布式系统相关模块实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯535.3实验分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..545.3.1实验介绍⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯545.3.2实验评估方法⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯545.3.3实验结果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯54V 目录5.4系统测试与结果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..565.4.1测试环境⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯565.4.2功能测试⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯565.5本章小结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..57第6章总结与展望⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯586.1本文总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..586.2工作展望⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..58参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.59致谢⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.62VI 第1章绪论1.1课题研究背景第1章绪论随着互联网技术的飞速发展和人们对互联网的日益增长的需求,全球Web服务器的总数不断增加,网站、网页的数目也呈现爆炸性地增长。据中国互联网络信息中心(CNNIC)在2014年12月发布的《中国互联网络发展状况统计报告》【l】统计,中国的网民规模已经达到6.49亿,网站数目为335万个,网页数量为1899亿个,网络购物的用户已经达到3.61亿人。近几年,淘宝的兴起和一些B2C网站的发展,人们已经习惯于从互联网中获得自己需要的物质产品。与此同时,由于移动设备的发展,更多的人会选择互联网来充实自己的日常生活。互联网的发展给人们带来了大量的便利,但同时也提出了一个非常困难和急切需要解决的问题,即如何从爆炸性的海量数据中提取出我们需要的数据。较为直接也是较为常用的工具是搜索引擎,用户需要先输入关键词,搜索引擎反馈给用户搜索结果【21。但是这些关键词都是基于用户对于内容有了一定的理解,给出的也是基于关键词产生的一些相关结果,也就是说这是一种用户主动发掘需要的过程。在海量数据的情况下,仅仅使用搜索引擎会出现数据量过大还需要人为的删选的情况,而且这种技术也显得有些单调和过时。因此,人们面对海量的信息的时候就会很难找到自己所需要的东西或者信息,这就是信息过载(InformationOverload)D-5】问题。推荐系统[6】正是在这样的信息过载情况下出现的,它能够根据用户的喜好,推荐给用户所关心和需要的信息,给用户提供个性化的服务,从而让用户有更好的体验。近几年,推荐算法的研究也逐渐成为一个独立的学科,越来越多的人投身于此类研究中。Google公司是搜索界的领头羊,一直以绝对的技术优势占据业界领先地位。2003年起,Google公司先后发表了三篇论文,分别是:Google剐PSystem[71,一个用于大规模分布式数据处理相关应用的,可扩展的分布式文件系统;MapReduce[81,一个编程模型,处理和生成超大数据集的算法模型的相关实现;BigTable[91,一种分布式数据存储系统,用来处理海量的数据的非关系型的数据库。这三大论文和技术的出现,随即就引起了众多技术爱好者的关注。Hadoop项目就是根据Google的MapReduce和GoogleFileSystem的理论做了JA、,A的实现,MapReduce编程模型屏蔽了底层的很多并行处理和通信处理,程序员只需要关心自身的业务逻辑,HDFS是Hadoop的一个分布式文件系统。Hadoop可以部署到一般廉价的PC集群,大大减轻了企业的成本。近几年来,Hadoop平台技术的不断发展,功能的不断增强,为我们完成本课题 第1章绪论提供了不少技术上的支持,同时在安全性和稳定性上的突破增加了我们完成基于Hadoop的电影推荐系统的信心。1.2课题研究意义由于海量数据的出现,单纯的依靠搜索引擎根据所给的关键词搜索出来的结果,己经无法完全满足人们对个性化信息的需求,因此产生了个性化的推荐系统,根据用户的兴趣主动推荐给用户需要的信息。在((2013-2017年中国电影产业市场前瞻与投资战略规划分析报告》中的数据显示,2013年我国共产出各类电影总量达到893部,观影人次达5700多万,电影总票房达到了216亿元,电影市场进入快速发展时期。在2014年,中国电影达到了前所未有的高度,其中有亲子电影《爸爸去哪儿》以真人秀形式创下了两亿票房,郭敬明指导的《小时代3》票房超过了五亿。作为当今人们的休闲活动之一,电影的作用愈加明显。在互联网看电影方便快捷,不需要到几公里外的电影院,正在成为人们看电影首选的方式。国内优酷、土豆、爱奇艺等视频网站都提供了大量的在线电影,用户只需要轻点鼠标,在线支付几元就可以看到最新的院线电影。如何在众多的在线视频网站脱颖而出,主要还是依赖视频、网站的质量和推荐系统的好坏。Hadoop是一个高效、可靠、可扩展的开源分布式软件框架解决方案和工业级应用,主要用于大规模数据的存储和业务计算处理[10】,目前已被很多大型网站和公司采用,并取得很好的效果。本文将选取ApacheHadoop作为本论文应用系统的分布式计算平台,运用推荐算法,实现一个强大的推荐系统,为一个在线电影推荐网站提供个性化推荐支持。Hadoop主要由两大核心模块组成:分布式文件系统HDFS和分布式批处理框架MapReduce两部分组成。HDFS为我们提供了包括大规模文件存储系统以及对应可靠的备份管理机制的高容错性、高吞吐量的海量数据存储解决方案,而MapReduce编程模型为开发人员提供便利的分布式应用开发接口,屏蔽了如通信、同步、调度计算、负载均衡、处理机器异常等的处理,对于上层开发人员是透明的【11】。研究基于Hadoop平台的电影推荐系统有以下三方面的意义:第一,使用廉价的PC组成Hadoop的集群,致力于用较少的成本完成较好的功能,为一些需要这样业务的中小公司、网站开发个性化推荐系统提供一个简单易用且优秀的模板。第二,在线电影网站的发展使很多大型网站得到了丰厚的回报,但是对于一些中小公司而言,搭建一个集群的分布式推荐系统往往会耗费大量的人力物力,技术难度也较大,本文致力于研究快速搭建一个简单实用的推荐系统的方法。第三,个性化推荐算法是最近几年新兴以及优秀的推荐算法,发掘隐藏在用户和 第1章绪论产品间的选择关系。MapReduce的并行化可使算法具有良好的可扩展性,能有效地应对海量数据的挑战。1.3课题研究现状追根溯源,推荐系统被认为是预测理论、函数逼近理论、信息检索等学科中的一些扩展和衍生。在大型的电子商务网站亚马逊、阿里巴巴、社交网站Facebook、新浪微博、个性化推荐网站豆瓣和电影租赁网站Netflix都大量使用了推荐系统。1.3.1国外研究现状1994年,来自明尼苏达大学的研究组组成了的GroupLens研究小组推出了GroupLens系统【13】,该系统可以向用户推荐文章。GroupLens研究小组在推荐系统方面做出了巨大的贡献:建立模型并推出了协同过滤引擎,这标志着推荐系统已经开始渐渐成了一个独立的研究方向。GroupLens小组提出的协同过滤推荐模型引领了在这以后推荐领域十多年的发展潮流。这个算法就是当前比较流行的,大部分人使用的基于用户的协同过滤推荐算法。依照这个算法思想,后来人们又研究出了一批著名的推荐算法,例如基于项目的协同过滤算法、基于矩阵分解的协同过滤算法等,还有一些基于内容和基于知识的算法,本文在第3章将选取一些算法作进行详细介绍和研究。在1997年,AT&T实验室的研究人员提出了基于协同过滤的个性化推荐系统PHOAKS及ReferralWeb;在2000年,Kurt等NEC研究院的研究人员把个性化推荐功能植入到搜索引擎CiteSeer中:2001年,Gediminas等人构建了一个用于电商网站的个性化实施的用户建模系统——IPro;2007年3月开始,Google在AdWords盈利模式中添加了个性化元素,从而更好地掌握用户的需求。1999年开始,ACM每年召开关于电子商务的研讨会,会议中关于推荐系统研究的比重逐步增大。特别是近几年,与机器学习、人工智能等相关一些重要的国际学术会议中,如AAAI、ICDM、ICML、SIGIR、ECML等,都包含关于推荐系统的主题的内容。文献【14】提到了一些国外公司推荐系统应用情况。Netflix公司对推荐算法有相当高的依赖程度,它使用基于物品的相似度的推荐算法来为用户进行电影推荐。Netflix公司从2006年开始举办推荐算法的比赛,并提供真实的后台数据集给参赛人员使用。Netflix在它的宣传资料中宣称,它们的推荐系统效果非常好,约有60%的用户是通过其推荐系统找到他们感兴趣的电影和视频。同时,Netflix公司开出100万美元的奖金,奖励给能把网站的产品推荐精确度提高10%的参赛人员。Amazon.corn·一个美国的网上书店,它记录了用户在它网页浏览情况和商品收 第1章绪论藏购买情况,然后通过对这些记录进行分析,产生目标用户的推荐列表。MovieLens:电影推荐系统,用户对自己看过的电影进行评分,至少需要15部,分数值为1.5分,然后系统寻找与目标用户相似性程度较高的邻居用户,最后根据这些邻居用户的评分信息,对目标用户产生个性化推荐。EBay:当前最大的网络交易平台,通过要求用户提供对商品的满意度评分以及对其他客户的相关评述来获得用户的反馈信息,并利用这些信息来对用户产生相应的个性化服务。Ringo:音乐推荐系统,它根据用户己有的音乐专辑,预测该用户对其他所有音乐的评分值,然后将评分值较高的音乐推荐给这个用户。1.3.2国内研究现状国内的推荐系统还处于起步阶段,由于网站用户数量巨大,拥有海量的信息,对推荐系统的需求也较为迫切。阿里巴巴、百度等公司每年会举办一些推荐系统的比赛,迅速地推动了国内推荐系统的发展。打开淘宝、京东、优酷等一些网站,很多地方可以看到推荐给你的字样。可见在国内,推荐系统已经被大面积、高频率地使用,相信国内推荐系统赶上国外也只是时间问题。豆瓣电影是国内较有影响的推荐系统,当用户在豆瓣电影频道中将看过的或是感兴趣的电影加入列表中,并为它们做相应的评分,此时豆瓣的推荐引擎已经获得用户的一些偏好信息,会推荐一些电影。国内还有一些推荐系统的丛书,最著名的是项亮编写的《推荐系统实践》【12】。书中介绍了推荐系统的一些概念,推荐系统在各个行业的应用和推荐系统设计的方法,还有作者参加Netflix比赛的经历和感受。但是可以看到使用国内使用推荐系统的都为大型公司,中小型公司尽管有迫切的需求,受制于资金、人员、技术的因素难以开发一个优秀的能够处理大数据的推荐系统。1.4论文结构本文共分6章:第一章绪论,阐述本课题研究的背景及意义,然后对推荐系统在国内外研究现状进行介绍,包括国内外一些公司使用的技术。第二章对Hadoop项目的介绍,主要讲述了后续实现需要用到的Hadoop平台,MapReduce编程模型和Hadoop的文件系统HDFS,同时介绍SpringMVC的Web框架,主要是MVC的编程模型以及SpringMVC的一些详细理论,最后是一些数据库、WEB容器等工具。 第1章绪论第三章推荐算法的相关理论与技术研究,首先对介绍推荐算法的流程,其次分析了各个推荐算法的特点,并研究了它的优缺点,为后续的推荐算法运用和实现提供理论依据。第四章基于Hadoop的电影推荐系统需求分析,在推荐引擎的功能性需求和非功能性需求方面分析需求,然后对基于Hadoop的电影推荐系统进行系统设计、数据库设计、模块设计等。第五章基于Hadoop的电影推荐系统实现与测试,将首先介绍如何搭建Hadoop的工作集群和SpringMVC的开发环境,然后实现并编码各个功能模块,并对系统的相关功能进行测试,最后验证系统是否符合预设要求。第六章工作总结与展望,对全文进行总结,描述在本课题中所完成的任务,并指出本课题中存在的不足,指出将来的研究方向。 第2章Hadoop平台和SpringMVC框架第2章Hadoop平台和SpringMVC框架2.1Hadoop平台2.1.1Hadoop简介Hadoop是一个得到Apachev2认证的支持数据密集型分布式计算的开源软件框架,支持在大规模集群上运行应用,并可以透明地提供可信性和数据移动【16】。Hadoop使用简易的编程模型,可以以分布式的方式快速地处理分布在集群机器上的大规模数据集,通过部署廉价的机器集群可以与任何高性能的计算机并驾齐驱,用横向扩展的斜线战胜纵向扩展的曲线【17】。Hadoop项目采用Java语言作为主要开发语言(设计思想来源于Google的三大论文,但是Google公司内部使用C++实现,而且没有对外公开其源代码),它由ApacheLucene的创始人DougCutting和MikeCafarella于2004年创建的,项目起源于2002年的开源网络搜索引擎框架ApacheNutch[18],一个开源Java实现的搜索引擎,提供运行自己的搜索引擎所需的全部工具。2006年2月,Hadoop项目脱离Nutch作为Lucene的子项目。到目前为止,Hadoop已经发展成为包含HDFS、MapReduce、HBase等多个子项目的集合,被广泛用于分布式计算。随着Hadoop的发展,它成为了Apache的顶级项目。由于Hadoop用于分布式处理有着明显的优势,因此在互联网领域得到了广泛地应用。最早应用Hadoop的是雅虎(Yahoo!),在2008年2月,雅虎公司搭建了超过2000个计算节点组成的Hadoop集群,在集群上运行了万个虚拟服务器来处理超过数PB大小的网页,这项技术使雅虎的搜索技术有了很大的提升。Hadoop目前已经取得了骄人的成绩,随着新应用领域的拓展、互联网的发展、业务模式的增加,还会继续展示出它的作用。2.1.2HDFS简介HDFS是谷歌GFS的开源实现,是一个具有高度容错的分布式文件系统,使用分布式方式存储文件,因此能够提供高数据访问的吞吐量,并且适合存储海量数据文件,一般是PB级别。HDFS采用主从结构,也就是Master-Slave结构。该文件系统由唯一的NameNode和多个DateNode组成,NameNode作为HDFS主节点,所有的DataNode都是从节点,受到NameNode管理【17】。HDFS的总体架构如图2.1所示。 第2章Hadoop平台和SpringMVC框架D图2.1HDFS的体系结构1)NameNodeNameNode的功能是管理HDFS的名称空间和控制外部的客户访问文件数据。NameNode规定以怎样的方式将数据存储到DataNode上,DataNode及数据块的文件映射的元数据保存在NameNode节点上。当客户机请求创建新文件时,NameNode会以新创建块的标识和该块所对应的DataNode的IP地址响应操作。同时,NameNode还会创建备份块及其相关信息,并通知DataNode接收数据其备份块的信息。所有关于文件系统名称空间的数据都被NameNode存放在Fslmage文件中,NameNode将该文件及记录所有事务的文件EditLog存储在的NameNode所在节点的本地文件系统中。为了防止文件被损坏及NameNode系统故障,NameNode对这两个文件也进行了备份。2)DataNodeHDFS通常会以机架的形式组织DataNode,机架之间可以通过交换机联系起来,机架内部各个节点间的传输速度会快于机架间传输速度,因此HDFS通常会将一个备份数据块放在机架内的相异节点上。若有一个节点突然发生故障,就可以快速地将该节点的数据从同一机架的备份中恢复到该机架中的另一个节点上。DataNode不仅要响应HDFS的客户机的读写请求,还要对NameNode发送对块的操作命令做出响应。每个DataNode都会向NameNode发送心跳消息,每条消息包中都包含一个块信息相关的报告,NameNode根据这个报告验证块映射和其他文件系统的元数据是否正确。如果NameNode在规定的时间内没有收到某个DataNode发送 第2章Hadoop平台和SpringMYC框架心跳消息,将对这DataNode上的数据将采取修复措施。2.1.3HDFS的数据操作如图2.2所示,是HDFS数据操作涉及到的几个重要的部件的框图。数据操作一般包含文件的读取,文件的写入和一致性模型。图2.2客户端数据操作框图文件的读取:1)客户端向DistributedFileSystem读取它需要的数据,DistributedFileSystem通过RPC协议调用NameNode来确定所请求的文件块位置。2)DistributedFileSystem向客户端提供一个支持文件定位的输入对象FSDataInputStream,用于客户端读取文件存储信息。3)客户端从包含文件第一个最近的DataNode中读取数据,直到全部读完。文件的写入:I)客户端通过DistributedFiieSystem对象创建一个文件。2)NameNode会验证这个新文件是否存在于文件系统中,并确保客户端有这个文件的权限,并返回一个FSDataOutputStream给客户端用来写入数据,FSDataOutputStream包含一个数据流对象DFSOutputStream,用来处理和DataNode及NameNode之间通信。3)客户端写入数据时,DFSOutputstream会将文件分割成包,放入到数据流中,同时分配DataNode存放的副本。4)DFSOutputStream等待所有的DataNode返回成功信息,完成文件的写入。 第2章Hadoop平台和SpringMVC框架一致性模型:1)如果NameNode发现DataNode中部分文件的Block块出现问题,比如复制数目不满足或者一些DataNode消失的情况。2)通知DataNode相互复制Block块。3)DataNode开始直接相互复制。2.1.4MapReduce计算流程MapReduce技术可以从很多复杂的细节中把分布式业务逻辑抽象出来,使更多程序员能够进行并行应用程序的开发,其中包括一些没有或者拥有很少并行开发经验的程序员。MapReduce的设计目标是方便编程人员在不熟悉分布式并行编程的情况下,将自己的程序运行在分布式系统上。MapReduce的名字源于函数式编程模型中的两个重要操作:Map操作和Reduce操作。MapReduce的计算流程如图2.3所示。图2.3MapReduce的计算流程Input阶段:Map任务指明待处理数据的输入路径和输出的结果的路径,输入目录下较大的文件会被分割成多个小文件,并以对的形式读入。Map阶段:将执行用户编程实现的Map函数,会产生一批新的中间键值对。Shuffle阶段:完成数据交换工作,将相同key的中间结果尽可能的处理到同一个节点。Sort阶段:将按照key对Reduce的输入进行分组。一般来说,Shuffle和Sort是同时进行的。Reduce阶段:对每一个唯一的key执行用户编程实现的Reduce函数。输入的,输出是新键值对。 第2章Hadoop平台和SpringMVC框架Output阶段:将Reduce输出的结果写入到设置好的目录中。2.1.5MapReduce工作机制在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker。JobTracker是用于调度工作的,TaskTracker是用于执行工作的,一个Hadoop集群中只有一台JobTracker。MapReduce的任务执行流程[19。21】如图2.4所示,用户提交分布式程序后,Hadoop隐藏了很多的过程和处理,去完成规定的任务,下面将详细介绍每一步的过程。强锩霉!、/’秘舅}磷i.L1‘警。、‘_^纛濑§麟羹囊+i蓼埯s缝国薯囊^1;。⋯⋯⋯~瀵磐夔萋’:嚣黧}jobt阳(I【wnodeⅢo^“^+P一、●⋯⋯m、n、*+d"⋯“M⋯。+wo⋯tnq”7_}{{,#}{辩莉·tt‰≠,(,“},!chiIdJv趟鬻|||||嚣、i。”1;;1⋯缪譬mi攀鬻豫、’埘I:节MapraSk蔓嚣一Of|鬻ReduceTask图2.4MapReduce工作原理图①作业初始化向JobTracker请求一个新的作业ID,JobTracker将接收的作业交到作业调度器中进行调度并执行初始化,并将目标文件分成大小不相等的若干小数据块,数据块大小由用户给定的参数控制,然后开始在集群中自动拷贝。②分派Map/Reduce任务TaskTracker和JobTracker之间的通信采用心跳机制,当JobTracker接收到任务时,为TaskTracker分派一个任务,并将分配信息传送给TaskTracker。在JobTracker为TaskTracker分派任务的时候,为了减少网络流量,将Map任务的数据在本地处理。③读取 第2章Hadoop平台和SpringldVC框架TaskTracker接收到JobTracker分派的Map任务后,读取相关的数据块,从原始数据中解析出键值对(key.value),由Map函数进行处理,得到中间键值后,存入内存缓冲区。④本地写入内存中的数据会被划分函数分到若干个区域,TaskTracker会将这些数据写入到本地(包括jar、代码、配置信息、分片信息等)。这些存放在本地数据位置信息会被送回到JobTracker,然后JobTracker将这些位置信息传至执行Reduce任务的工作站。⑤远程读取TaskTracker执行Reduce任务时,JobTracker通知任务需要数据的位置,然后通过远程方式读取执行Map任务的本地缓冲数据。Reduce读取完所有中间数据后,通过中间关键字对数据进行排列,把具有相同关键字的数据分为一类。此时,需要使用排序操作,具有不同的关键字Key,Map函数处理后会进行相同的Reduce操作。⑥写到输出文件Reduce会对每一个由唯一的中间关键字对应的中间数据进行排列,它发送关键字和对应的中间值给用户的Reduce函数,Reduce函数的输出结果将被添加到最后的输出文件中。当所有的Map任务和Reduce任务都已经完成时,Master激活用户程序,Map/Reduce返回用户程序的调用点。由上几节介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统。HDFS在集群上最重要的功能是实现了分布式文件系统,而MapReduce在集群上最重要的功能则是实现了任务处理和分布式计算两大功能。HDFS在MapReduce任务处理的过程中提供了对文件操作和存储等功能支持。MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果。二者相互作用,共同完成了Hadoop分布式集群的主要任务。2.2SpringMVC框架2.2.1WEB服务Web服务是具有标准接口描述的可编程模块,这些标准接口描述提供了通过标准通信协议的统一访问方式【22】。Web服务的功能可以在不同的平台(Linux、Unix、Windows等)上用不同的语言(比如Java、C、C++、Pascal等)实现。一个Web服务通常封装了它的功能实现细节,并且只能通过发布的接口来访问这个服务。根据w3c(万维网联盟)在2004年给出的定义【231:Web服务是支持不同机器之间通过网络进行交互操作的软件系统,它拥有一个用机器可处理的格式所描述的接口, 第2章Hadoop平台和SpringMVC框架 其它系统使用SOAP消息以一种规定的方式与Web服务进行交互,SOAP消息是经 由HTTP传送的XML序列串。2008年,Papazoglou等人指出【24】,Web服务是平台独 立、可编程的Web应用程序,它可通过XML标准来描述、发布、发现、协调和集成。 2.2.2 MVC设计模式 MVC是Model.View.Controller的缩写即模型.视图.控制器。MVC开发模式可以 将应用程序的输入的过程、处理的过程和输出的结果相分离,三个核心部件只需要各 自处理自己的任务,不需要考虑其他部件。下面将简要地介绍一下这三个部件【25】【26】: 模型也被称为数据模型,功能是封装与要处理的业务逻辑相关的数据,并定义处 理数据的方法。模型拥有访问数据的权限,可以对数据库进行操作。模型无需关心数 据的显示和操作的实现方法,但存在监听机制来监视模型上注册的视图。一旦视图数 据发生改变,就会触发模型组件做出相应操作。 视图组件是用户与之交互的界面,作用是显示后台产生的数据的和提供用户操纵。 通过访问它监视的数据模型来刷新自己的功能。对于一般的WEB应用程序来说,视 图是由HTML组成的界面。 控制器组件是应用程序中处理用户交互的部分,是用来组织不同层面以及控制处 理的流程。它对用户的请求进行处理,来决定调用哪个模块去执行,对数据库处理和 数据库设计也通常在这个环节完成。 图2.5描述了MVC设计模式的基本工作状态。 ——H———————_... 一一一一一一_l卜 调用方法 事件 图2.5 MVC设计模式工作图 zkq 20151222 第2章Hadoop平台和SpringMVC框架 MVC的工作模式对于普通的开发者来说有很多的优点: 1)允许多个视图共享同一个模型。对于程序设计来说,尤其是Web程序开发, 同一个应用程序通常会有不同的用户界面,有些用户希望通过浏览器来进行浏览,也 有的希望通过移动终端来访问,还有一些用户同时会使用这两种方式,以上的需求就 需要Web网站能够同时提供Internet和移动终端两种视图。 2)一个应用被分成三层,视图与模型分离。在视图层,用户发送请求模型层,模 型层返回用户需要的数据,视图组件只负责呈现给用户的外部显示,这样处理使得外 在显示与业务逻辑分离,很大程度地提高了代码的重用性。 3)由于控制器的独立,可以使应用程序的业务规则或数据源更改变得更加方便。 例如,一个系统更换数据源或者对数据库进行移植时,可以通过简单的更改控制器的 方法轻松地实现数据源改变。由于三个模块问的独立,改变控制器后,视图以及模型 不需要做任何改变。 4)MVC还具有可维护性高、部署快、利于工程化软件的管理等优点。 2.2.3 SpringMVC框架 在开发一个B/S项目时,为开发团队选择一款优秀的MVC框架是一件非常困难 的事,在众多方案中选择一款适合本团队的框架需要很高的经验和水平,这个决定会 影响团队未来的几年的开发,因此需要考虑方面如下: 易用性:需要简单易用,以提高开发效率,让开发者将大部分的精力放在业务上, 小部分的精力在框架上。 高性能:性能优秀,性能决定了以后项目完成后的很多特性。 通用性:要求使用大众的框架,即常见的、通用的,有较多公司使用的框架,一 些新员工已经在这方面有一些技术积累,可大大减低人员流动再适应产生的副作用。 SpringMVC是当前最优秀的MVC框架之一,自Sprin92.5版本发布后,由于它 支持了注解配置,易用性有了大幅度地提高。Sprin93.0更加完善,实现了对Struts2 的超越。因此,现在越来越多的开发团队选择了SpringMVC框架。SpringMVC[27】【281 属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC 实现了MVC的核心概念,它为控制器和处理程序提供了大量与此模式相关的功能, 并且当向MVC添加反转控制时,它使应用程序高度解耦,提供了通过简单的配置更 改即可动态更改组件的灵活性。 与Struts 2相比,SpringMVC有如下的优点: 1、SpringMVC使用简单,学习成本低,学习的难度远小于Struts2。同时,Struts2 较繁杂,有很多用不上的功能。 2、使用Spring MVC很容易就可以写出性能优秀的程序,而Struts2要处处小心 zkq 20151222 第2章Hadoop平台和SpringMVC框架 才可以写出性能优秀的程序。 3、Spring MVC是一个非常灵活的框架,Spring框架有良好的扩展性,SpringMVC 当然也会继承有个优秀的特性,不会因使用了MVC框架而产生多余的限制。 2.3其他 2.3.1 MySQL MySQLt31][32]是一个关系型数据库管理系统RDBMS,由瑞典MySQLAB公司开 发的,在2008年被Sun公司收购,目前属于Oracle公司(Oracle收购Sun)。在WEB 应用方面,MySQL是最好使用的、最流行的数据库应用软件之一。MySQL作为一神 关联数据库管理系统,将数据保存在不同的表中,这样提高了访问的速度并增加了灵 活性。同时,MySQL所使用的SQL语言是最常用标准化SQL语言。MySQL软件有 商业版和社区版,其中的社区版是一个免费的版本。MySQL速度快、体积小、成本 低,最为重要的是开放源码的特点,使得很多中小型网站的开发为了降低成本都选择 它作为网站数据库。 MySQL有以下的六大优点,这些是本课题选择它作为WEB应用的数据库的原 因。 成本低:MySQL数据库属于MySQLAB公司,有一个社区版可以在互联网上免 费下载,而且源代码是开放的,这就是MySQL其中的一个最大的优势。同时,如果 有MySQL项目不符合GPL许可证的规定,只需支付少量的费用就可货到商业许可 证。 简单性:MySQL数据库在开发和支持方面,都有大量强大的工具可以选择。一 个新手可以轻易的在一个常见硬件上安装和配置MySQL,一个新开发者可以轻松实 现MySQL数据库开发,而不需要经过相关的学习和培训。 灵活性:MySQL是一个数据库家族,你可以根据你的需要从选择一个并配置它。 因此,我们可以在开始的时候选择一个比较小巧的版本产品,由于开源的属性,以后 根据需要对其性能或大小再进行扩展。 普及性:MySQL在全世界生产系统装机数量是1200万套,每天的下载数量是7 万份,早在2013年就已经抢占了约25%的市场份额。在互联网上有丰富的资源,可 以轻松获取帮助信息。与其他的开源数据库和闭源数据库相比,绝大多数的开发者喜 欢选择MySQL。 适用面广:MySQL在各种各样的操作系统上都能进行简单的安装与运行 (Windows、Linux、MacOS等操作系统),它的自动化安装包可以在几分钟内完成安 装并启动服务,同时软件支持绿色安装。同时,MySQLAB公司能够提供支持和维护 zkq 20151222 第2章Hadoop平台和SpringMVC框架 服务,例如代码更新、补丁修补等。 稳定性:MySQL的稳定性足以满足各种项目的需要,美国航空航天局、Yahoo!、 维基百科、索尼等大机构和大公司都在使用它作为数据库。 2.3.2 Tomcat Tomcat是Apache软件基金会的一个核心项目,由一些公司(Sun、Apache等) 及个人共同开发而成。有了Sun公司的参与和支持,Tomcat总是能够得到最新的 Servlet和JSP规范。因为Tomcat技术先进、性能稳定,更重要的是免费的特点,深 受了广大Java爱好者的喜爱,同时也得到了众多软件开发商的肯定,是目前流行的 Web应用服务器之一。 Tomcat服务器是一个免费的开放源代码的轻量级应用服务器,适用的场合是并 发数目少的中小型系统。因为轻量得特点,Tomcat是开发和调试JSP程序的首选。 对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利 用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上,Tomcat 部分是Apache服务器的扩展,但它是独立运行的,因此当你运行Tomcat服务器的时 候,它实际上是作为一个与Apache独立的进程单独运行的。 2.4本章小结 本章详细地介绍了与项目相关的核心技术,包括Hadoop平台简介,Hadoop的两 大核心内容HDFS和MapReduce、SpringMVC开发框架、MySQL数据库和Tomcat 服务器。 在大数据的今天,使用Hadoop作为项目的分布式平台,有着高可靠性、高扩展 性、高效性等优点,通过介绍Hadoop平台和详细讲解HDFS,MapReduce的结构、 工作机制等,为下一步设计实现基于Hadoop的电影推荐系统奠定了理论基础。 SpringMVC具有使用灵活、逻辑清楚等优点,三层结构为推荐系统提供了优秀的接 口,这些都是选择它的原因。Tomcat和MySQL是被大小型企业广泛应用的服务器和 数据库,具有免费、简单易用和较好兼容性的特点,也符合为中小型企业搭建推荐系 统的需求。 zkq 20151222 第3章推荐系统理论研究 第3章推荐系统理论研究 推荐系统至今没有一个明确的定义,一般引用Resnick和Varian[33】在ACM的“推 荐系统”特刊上的描述:它利用电子商务网站向客户提供商品的信息和建议,帮助用 户决定购买哪种商品,协助完成购买过程。 推荐系统主要包括三个模块[34],即用户模块、推荐算法模块、推荐对象模块,其 中最为关键的是推荐算法,通过推荐算法的计算,为用户推荐需要的信息或者感兴趣 的物品,如图3.1是推荐系统原理图。 图3.1推荐系统原理图 推荐系统通过主动收集用户的信息包括一些兴趣爱好、浏览历史等,通过推荐算 法从待推荐的对象中选择产生推荐对象,然后将结果反馈给用户。 对于一般的推荐系统,可以有如下的形式化公式3。1[35】: 假设C是所有用户user集合,S是所有推荐给用户user的对象集合,可能是物品 的集合,如书、电影、餐馆等。设“是计算对象s对用户C的推荐度,表示为 “:CxS_R,(R是一定范围内的全序正实数),对于每一个用户c∈C,我们计算出 这样的一个集合S·∈S,使用户的效用得到最大化,最后可以得出一般的公式(3.1)。 Vc∈C,J’。=argmaxu(c,J) (3.1) 对于公式3.1,许多研究者提出了不同的推荐算法,热门的算法主要有以下的几 种:基于内容的推荐算法、基于关联规则的推荐算法和协同过滤算法。以下几节将对 这三种算法进行详细地介绍和研究。 3.1基于内容的推荐 推荐算法最早出现的时候大多是基于内容的推荐技术。基于内容的推荐算法主要 依据推荐项目的特征信息进行推荐,就是信息的内容和用户兴趣之间的相似性。所采 zkq 20151222 第3章推荐系统理论研究 用的用户资料模型取决于所用的学习方法,常用的有决策树、神经网络和基于向量的 表示方法等[361。 如果一个用户观看了一部美国的动作片,那么基于内容的推荐算法会将这个主题 的相关电影推荐给这个用户。运用基于内容推荐算法,比较著名的系统有Letizia[3 71、 Personal WebWatcher[381、Syskill&Webert[39】等。 用痃送趣。 篓_资源j:誊。兰_j。=描述善.≯一。= 羔 j)==o ■ 图3.2基于内容推荐图 图3.2所示是基于内容推荐算法的示意图,基于内容的推荐源于一般的信息检索 算法,依据用户所评价的物品的特征,学习用户的兴趣,对待评价的物品通过特征提 取方法得到描述物品内容的特征向量,再通过匹配排序算法给出推荐结果。 基于内容的推荐算法流程如下: 1)进行项目的内容表示,具体是文本、图像等信息,一般需要通过项目特征提 取转化成结构化的数据才能表示项目,以文本为例,采用统计文档频率的常用方法 TF.IDF算法来计算文档中关键词频率,提取出其中权重较大的关键词作为特征。 Content(i)=瓴:wl;x2:w2;⋯xk:比} (3.2) 其中i表示一个文本,≮表示关键词,W。表示权重的大小,如果把所有的关键词 进行统一,将每个文本都用这些关键词表示,则每个文本就可以表示成相同维度的一 个向量。 Content(i)={Wl,w2,...,Ⅵ> (3.3) 2)根据用户对项目的行为记录,汇总出用户喜欢的项目来表示用户的兴趣点, 可表示为以下形式。 UserProfile(u):兰业2竺竺塑 f3.4)=兰坐坐L——= (3.4) zkq 20151222 第3章推荐系统理论研究3)得到用户兴趣模型和特征向量后,通过计算项目的预测评分给用户推荐的结果,效用函数定义为:U(u,i)=S(userprofile(u),content(i))(3.5)函数U(%f)计算方式可以使用向量夹角余弦计算,然后根据计算结果效用函数值排序,推荐排序较前的几个项目。3.2基于关联规则的推荐关联规则挖掘【40】就是通过用户指定的最小支持度,在全部事务数据库中挖掘出满足不小于最小支持度的频繁项目集,再通过用户指定的最小置信度,在全部频繁项目集中挖掘出那些不小于最小置信度的强关联规则。基于关联规则【4I】的推荐是指用户在购买某些商品时有较大的倾向去购买另外的一些商品。关联规则算法最早应用于“购物篮分析”【42】【43】。通过使用关联规则算法来对客户的事务执行购物篮分析,可以知道哪些产品比较热销,以及一个特定的产品与另一个产品一起被购买的可能性大小。如在数据挖掘应用中最典型的例子“啤酒与尿布”,就是销售商们通过大量的客户购买信息,挖掘出一条关联规则,即在购买尿布的用户中,有很大比例的人还同时购买了啤酒。知道了这条规则,商家就可以采取行动,改变产品的布局来增加销售和管理库存。现在,关联规则挖掘不仅在零售业,在其它领域也得到了广泛应用。基于关联规则的挖掘可以分为两步【44】【45】:第一步,生成所有的频繁项集。这一步决定着整体的效率,计算数据库中各种项集的组合,项目集的出现频率需满足定义的最小支持度。第二步,由频繁项提取强关联规则。这个强关联规则必须同时满足最小支持度和最小置信度。在这两步中,重点是第一步,在数据规模比较庞大的情况下,它的解空间也会随之较大。另外,影响关联规则挖掘速度的一个重要的因素就是算法的效率。关联规则挖掘就是发现数据集中项之间有趣的关联,它是数据挖掘领域的一个重要分支。设P={Pl,仍,...,只。>是所有项的集合,D是数据库事务的集合,每个事务T是不同项组成的集合,使得T∈P。设A是一个项目集,事务T包含A,当且仅当A∈’I’。关联规则可表示为形如AjB的蕴含式,其中A£P,B∈P,且AnB=囝。规则A,B在数据库事务集D中成立,具有满足支持度support(A≥B)和置信度contidence(A≥B)。支持度s定义为数据库事务集D中包含项集A和B的并集的比例: 第3章推荐系统理论研究s2supp。rt(AjB)2P(4u召)=警(3.6)置信度c为数据库事务集D中包含A事务中,同时包含B事务所占的比例:c2c。nfidence(AjB)_P(BI彳)=竺群supportA=篙count(3.7)I}1月l可知,支持度和置信度是关联规则挖掘中重要的参数,支持度反应了规则的有用性,置信度反应了规则的确定性。支持度大于等于最小支持度阈值的项集称为频繁项集。含有尼个项目的集合称为尼项集。关联规则推荐就是寻找置信度大于最小置信度阈值的频繁项集中的top—K项目作为推荐结果。3.3协同过滤推荐协同过滤是一种研究最多,也是应用最广泛的推荐算法。一般采用最近邻方法,依据和目标用户拥有相似偏好的用户的选择信息向其进行推荐,即利用目标用户的近邻用户对某项目的评价值来预测目标用户对该项目的偏好程度。协同过滤推荐是一个自动的过程,系统根据用户的兴趣度给其进行推荐。协同过滤的原理在于:某个用户感兴趣的信息肯定也是其他用户感兴趣的信息,通过获得其他用户感兴趣的信息然后推荐给该用户。其基本思想比较直观,我们在平常生活中往往会运用到,当某个用户需要购买某件商品时,他可以先询问与他有相似兴趣的其他用户,然后把那些用户喜欢的,而将该用户没有听说过的商品推荐给他,另外用户的兴趣程度不会随时间而变化。我们用图形化的方式表示协同过滤的过程如图3.3所示 第3章推荐系统理论研究目标用户孱孰嗣关系数据。德蘩鹣孱瑟魏燧■j:j:蹩■用户偏好数据日志log邻居1的项目舔屠2酌颈刚==董邻居3的项目、l偏好度_,『jj偏好度二_!l¨_偏菇度_:|_l==f:==。。=j图3.3协同过滤的过程协同过滤推荐算法可分为基于模型和基于记忆两大类[46]。基于模型的系统过滤可分为基于贝叶斯网络、聚类、降维等一系列机器学习、人工智能的方法。基于记忆的协同过滤算法主要是利用统计的方法寻找出具有相似偏好和兴趣的邻居用户,然后基于最近邻的评分预测,从而产生推荐列表。下面将详细讲解记忆协同过滤中的基于用户的协同过滤和基于项目的协同过滤。a)基于用户的协同过滤基于用户的协同过滤算法以用户为主体的算法,强调的是社会性的属性,这类算法会把和用户有相似爱好的其他的用户的物品推荐给用户,如图3.4是基于用户的协同过滤示意图。 第3章推荐系统理论研究相似国用户1国用户2~喜欢爷~推荐—◆图3.4基于用户的协同过滤示意图在基于用户的协同过滤算法中,首先通过统计的方法找到与目标用户喜好最相近的多个邻居,然后根据这些邻居的评分情况,使用预测函数预测用户对预测项目的评分,最后按照用户对预测项目评分的高低排序,选择前K项作为推荐的结果,如图3.5是具体的流程图。园肭 第3章推荐系统理论研究图3.5基于用户协同过滤流程图基于用户的协同过滤可以分成五个步骤:①收集评价数据协同过滤算法一般采用用户一项目的评分矩阵,收集评价数据作为推荐系统的行为记录部分,用于整个系统的数据输入。举例来说,用户对资源的评分采用1.5分,评分的高低代表用户对资源的喜爱程度,1分表示很不喜欢,5分表示非常喜欢。表3.1是用户对资源的评分矩阵。表3.1评分矩阵itemlItem2Item3⋯U14l5U2322U3243●●●②计算用户相似度[47】由于人们比较信任与自己爱好相接近的用户,在预测目标用户对待预测项目的评 第3章推荐系统理论研究分的时候可以考虑和用户兴趣偏好相近的用户(即邻居)对这个项目的打分的情况。采用一种方法来计算用户之间的相似度,相似度越高说明两者喜好接近。比较常用的用户相似度量主要有夹角余弦相似性【48]和皮尔逊相关系数【48】。设用户集合为:C={C1C2,...,Cm),项集合为:P={P1,P2,...,见)。夹角余弦相似性,定义如下:∑‘.‘:5咖cq,乞,=c。scq,乞,2蔫2]●主赢VPt‘BI‘2n60l‘2其中,用户C,,C,用m维向量表示,向量c,、c:分别表示用户c,、评分,‘。和I:分别表示用户c。,c2对资源p的评分。在皮尔逊相关系数中,用户C.和C,的相似性定义如下:sim(q,c2)=(3.8)c:在e心上的(3.9)其中,&。。:表示用户c。、C2共同打分的项的集合,有P。。c:=%。n艮:;Pf,表示用户c,评分过的所有商品的集合,且%={p,∈尸I‘Ⅳ,≠o>;乞,,尹,为用户cf对商品乃一二∑‰的评分;_、艺:为用户c·、c:Pole2上的平均评分,有i2彳每习一。③寻找最近邻第二步中计算了目标用户与其他用户相似性后,根据相似度决定哪些用户是最近邻用户,设用户集合C={cl,乞,...,c卅),则目标用户q的最近邻用户集合U上除C,外的,故其余用户的集合为C‘=(c1,c:,...,%),c『仨C‘。通过计算目标用户C,与C1中每个用户之间的相似性sim(c。,C,),c,匹C’,根据系统设定的最近邻用户数量,设定合适的相似性阈值,将满足该阈值的用户添加到目标用户C,的最近邻用户集U。④预测评价得到目标用户Ci的最近邻集U后,根据预测函数进行评价预测,公式3.10是一种偏差的加权平均预测函数:_以=0,+.j}∑sim(ci,cf)。(_一0,)(3.10)qeU其中0,表示的是目标用户C,的所有最近邻用户对p,的平均评分,k是标准化因 第3章推荐系统理论研究子。⑤推荐列表产生第四步中通过预测函数得出目标用户G对所有未评分项目的评分,可以按照目标用户对项目评分的高低,选择分值最高的前N个项目作为预测结果,这样就完成了推荐的过程。b)基于项目的协同过滤基于用户的协同过滤通过计算最近邻用户的方法来预测结果,但是计算用户相似性以及寻找最近邻部分通常都需要在线执行,这就导致了大量用户情况下实时性难以满足。对于某些用户数量经常变化而产品相对稳定的系统,一般会使用基于项目的协同过滤方法,因此,本课题使用基于项目的协同过滤算法作为电影推荐系统的算法引擎。两者的原理和思想相似,基于用户计算的是用户之间的相似度,基于项目的协同过滤则计算物品之间的相似度。用户3——喜欢巾——推荐十图3.6基于项目协同过滤示意图相似如图3.6是一个基于项目的协同过滤系统示意图,假设用户1喜欢物品A和C:用户2喜欢物品A,B,c;用户3喜欢物品A。我们可以分析出物品A和C是比较相似的,因此喜欢物品A的用户可能也喜欢物品C,基于这样的分析,推荐系统可以把物品C推荐给用户3。 第3章推荐系统理论研究3.4算法选用本章的前3个小节详细介绍和研究了三种推荐的方法,在本节中,我们将对比这几种推荐方法的优缺点,从而选择本课题需要的推荐算法。3.4.1基于内容推荐优缺点基于内容的推荐系统的优点:用户独立性:基于内容过滤的推荐系统只需要分析当前用户的偏好文档,而协同过滤还在用户群中找到当前用户的相似用户并综合这些相似用户对某项目的评价,即可以不受打分稀疏性问题的约束。透明性:通过列出推荐项目的特征,解释为什么推荐这些产品,使用户在使用时具有更好的用户体验。新产品问题:新项目进入推荐系统后,基于内容的推荐方法为其提取特征,进而建立刻画其内容的特征向量,然后根据用户偏好文档决定是否向用户推荐。然而,基于内容的推荐系统也存在着以下缺点:有限的内容分析:只能分析一些容易提取的文本类内容,而自动提取多媒体数据(如图形、视频流、声音流等)的内容特征有着技术上的困难。过度规范问题:不能为用户发现新的感兴趣的资源,只能发现和用户已有兴趣相似的资源。新用户问题:当一个新的用户没有或很少对任何商品进行评分时,系统无法向该用户提供可信的推荐。3.4.2基于关联规则推荐优缺点基于关联规则的推荐的优点:能够发现新的兴趣点;简单直接,不需要相关领域的知识。基于关联规则的推荐的缺点:关联规则的推荐的发现最为关键且最耗时,是算法的瓶颈,有时候是难以接受的;其次,商品名称的同义性问题也是关联规则的一个难点。3.4.3基于协同过滤优缺点协同过滤具有如下的优点:通用性:对推荐的对象没有要求,能够处理难以进行机器自动内容分析的信息,一些非结构化的复杂对象,如电影、音乐等。开放性:推荐是开放的,可以共享其他人的经验,加快个性化学习的速度,而且避免了内容分析的不精确性和不完全性,并且能够基于一些复杂的、难以表述的概念 第3章推荐系统理论研究进行过滤。同时,协同过滤可以发现用户潜在的兴趣偏好,有推荐新信息的能力,可以发现内容上完全不相似的信息。协同过滤的缺点:最典型的问题有稀疏问题和可扩展问题。经过以上详细的对比可以发现,协同过滤的应用较为广泛。虽然基于内容的推荐在处理文本内容方面简单有效,推荐结果直接明了,但是运用在多媒体方面(包括本课题所涉及的电影)效果欠佳。关联规则能做到简单直接,不需要相关领域的知识,但是致命的缺点是耗时,这在我们的电影推荐网站是无法接受的。最终我们选择了协同过滤作为推荐的算法。3.5基于项目的协同过滤并行化在大数据的情况下,根据Item.User矩阵计算项目之间的相似度,会涉及到整个Item.User矩阵,要将它们全部加载到单机内存,是不现实的。因此,本课题将借鉴文献【49】提出的方法,设计分布式协同过滤算法。采用共词分析法[50】计算项目间的相似度,共词分析法可以分析出具有紧密联系的相似词,共同出现的次数越多,代表它们的关系越紧密,这种思想与项目之间的相似程度类似,可以通过它计算相似Item。如下表3.2是一个Item的共现矩阵,伟,表示Ite_『E与hem,共同出现的次数,即两者的相似程度。表3.2Item共现矩阵12⋯Im共现矩阵的作用与非分布式协同算法中的相似度作用类似,完成了传统算法中相似度的计算。如果u,(只,,,只,一匕,)7表示原有的第/个用户“对m个项目的所有偏好向量,用共现矩阵代替相似矩阵,用户“对项目i的预测偏好尸。。为:∑?’nikPk。P’m=——(3.11)∑?’‰ 第3章推荐系统理论研究NNNtf帚E-NNuj(一。,尸’:,一P’。,)7计算如图3.7所示:Il12⋯ImUj×Pl。P2uP.。图3.7预测偏好向量UjPl。P2。P.。U‘,中的值并不代表一个估计的偏好值,是一种偏好的程度,可以使用一定的方法归一化为偏好值。计算偏好时主要完成传统算法中寻找最近邻居和预测评分的过程。而最后产生的U’,值是获得推荐列表的依据。3.6本章小结本章详细的介绍了基于内容的推荐算法,基于关联规则的推荐算法和协同过滤推荐算法,它们是现在较为流行的三种方法。同时研究了它们各自的原理和步骤。其中,基于内容的推荐算法在文本处理中较为常用,而基于关联规则的推荐有着简单直接的特点,但是耗时较长,协同过滤推荐算法是目前应用较为广泛的技术,故在第四节中,比较了这三种推荐算法的优缺点,选用协同过滤算法中的基于项目的协同过滤算法作为电影推荐系统的算法,将其并行化,以能够在Hadoop上运行。 第4章系统需求与设计第4章系统需求与设计本文的重点是研究基于项目的协同过滤推荐算法,结合分布式处理加以改进,并以该算法为核心实现了一个高效的电影推荐系统。前几章介绍了一些推荐算法和一些与课题相关的技术,从本章开始将着手研究如何实现这个基于Hadoop的电影推荐系统,主要围绕需求分析、系统设计、模块设计和实现与测试这五个部分展开。4.1电影推荐系统的系统目标基于Hadoop的电影推荐系统设计的目标是面向用户在线观看电影的需求,为用户提供个性化、精确、快速推荐,提高用户的体验,从而使用户能够长时间的驻留在这个网站,使网站获得更好的收益。推荐系统的技术要求有如下:1)收集用户的行为信息,建立用户的评分矩阵。由于用户数量和信息的庞大,一般的处理方式难以实现,因此选用大数据平台处理,即使用Hadoop平台参与计算推荐。2)支持流行常用的算法。根据用户的兴趣产生较好的推荐结果,将与用户兴趣相关的电影推荐给目标用户。3)能够较快地响应用户的行为,保证高可用性。推荐系统服务作为WEB服务的一部分,需要提供稳定、可靠、低延时的服务。4.2需求分析4.2.1需求结构推荐系统的设计一般是基于特定的使用场景,亚马逊、豆瓣以及Digg(一个新闻推荐应用)都是根据自身网站的应用以及用户兴趣特点来设计推荐系统的,因此系统设计背景也是基于电影推荐网站应用场景来设计。如下图4.1所示,是基于Hadoop的电影推荐系统整个网站的系统结构图。 第4章系统需求与设计一G妙妙◇一图4.1系统结构图属◇对于一般电影视频网站都会存在前端展示组件,同时把后台的业务封装成服务。对于核心数据库的管理也是需要通过WEB服务来访问,WEB服务是连接前台后台的关键。一些业务逻辑的处理需要有业务处理组件的帮助,而推荐系统相对于后台业务并不是全部核心,但对于整个电子商务网站显得尤为重要。当前,个性化时代的潮流势不可挡,推荐系统已经成为整个系统的一项基本服务。但推荐系统并不是简单的一个后台逻辑或者一个函数调用可以完成的。广义上说,推荐系统属于数据挖掘和机器学习范畴,因此推荐系统的服务也更依赖于科学的推荐算法和大量的应用数据。4.2.2业务需求本课题研究的推荐系统主要分为三个部分,即用户行为收集子系统、离线数据分析子系统和在线推荐子系统。为了验证推荐引擎的效果,本课题将推荐引擎运用到电影网站中,展示推荐的结果。电影推荐系统用例如图4.2所示。 第4章系统需求与设计纛量毳曩翼≥/德鎏.鐾茎罗/≮..∑.7.纛季飘一一●:翔薄资瓣收集)\≮.薹::薹兰参沙j\篇流≮j:童.薹薹薹}::沙行为收集/,,@一@≤≤⋯⋯~@、、、、、湫⋯\、、、、⑨图4.2系统用例图1.用户行为收集用户在使用电影推荐网站时,各种操作行为和评分是推荐的基础,通过分析这些数据建立用户的兴趣度。用户的个人基本信息是固定的,可以从用户的注册资料中提取,推荐引擎不需要再次搜集。用户对每个电影的评分数据不固定的,它体现了用户兴趣所在,例如用户1对A电影评分是5分,表示非常喜欢,对B电影的评分可能是1分,表示很不喜欢,因此这是推荐引擎收集的重点数据。推荐引擎通过隐式的方式搜集用户的搜索、浏览记录及其他的行为数据。用户行为收集子系统用例描述如表4.1所示。表4.1用户行为收集用例表j功再甚薯刍i才零囊囊i7.≥耄|¨.:.?董j=I萋囊篱≥二童誊i,;≯。|≥羹_蔓。曩切再E抽还v≈^,k“譬嚣一~-r曩j黝嚣一.|。。”用户评分记录收集收集用户对电影的评分记录用户资料收集收集用户的注册信息用户浏览、记录收集收集用户浏览网站电影的历史记录 第4章系统需求与设计2.离线数据分析对大量的用户评分和日志数据进行分析,在进行日志分析之前需要对曰志进行预处理,如把日志格式化为标准的输入,对日志数据进行清洗等。通过分析用户的评分数据和历史行为来确定用户的兴趣爱好。离线数据分析用例描述见表4.2所示。表4.2离线数据分析用例表*;,jt—ij鼻*¨j。、■-|:墨一≈。~j。。p、、、’;功能名称参||■77,ii’≯j”j0:一『17功能描述i_。≯。1一i}i鞋j鬻日志预处理将日志数据处理为指定的格式,以便于快速的分析数据,同时删除不需要的数据。数据分析结合用户信息、电影信息、用户评分和历史记录预测用户可能喜好的电影数据库更新Hadoop分析后的结果更新数据库中用户可能喜欢的数据信息3.在线推荐在线推荐是将用户当前的行为进行分析,挖掘出当前用户可能喜欢的电影。在线推荐子系统首先要收集用户的评分和行为,然后根据用户当前的行为意图对候选的推荐数据进行过滤操作,向用户推荐可能喜欢电影。在线推荐子系统是基于B/S的方式来搭建的,可以做到同时向多个用户同时提供服务的。经过离线数据分析及在线推荐两部分的处理,已经分析得出用户的可能的需求,向用户展示推荐的结果。在线推荐用例描述如表4.3所示。表4.3在线推荐用例表¨—一{j一。×#。一童功育邕名称墨萋薯≯一■。,,一功能描述,00囊ji。蠢麓。j麓?i鬻蠹用户评分管理用户对某个电影的评分信息,主要用户推荐系统预测电影导航为用户导航到单独某一个电影详细页,给用户展示这部电影的信息站内搜索用户可以使用关键词搜索某一部电影电影评价用户可以对电影评价,让更多人了解到这部电影情况4.2.3其他需求本系统推荐引擎不仅能够处理海量的数据,同时还要求能高速响应用户请求,为此对系统运行的各个性能做了如下的规定,如表4.4所示。 第4章系统需求与设计表4.4其他需求表。。_i囊一t嚣i嚣t。.,。||.薯.÷”_『j湃缅墓身誉≯器。鬻謦鬻攀鬻j磐蘩繁鬻!!冀麓i!澄璧睫能撸鼠誊譬|jj澎j黪孽鬻譬。≯j_j:≤⋯。≯蠢海量数据处理推荐引擎具备对大量用户评分进行分析,需要有强大的计算能力,要求在十分钟内处理好离线数据。安全性防止有些恶意的破坏行为,系统需要能识别不合法的请求。高并发能够处理大量的用户的操作,做出及时响应。4.3数据库设计本节对推荐引擎的数据库进行设计,结合基于Hadoop的分布式和电影推荐网站的特点来设计数据库,单一的从推荐引擎的角度进行数据库设计是没有意义的,因为本课题的推荐方式主要是基于项目的协同过滤的分布式算法,仅使用了数据推荐表。本节将从数据库的逻辑设计与表设计两方面来设计数据库。4.3.1逻辑设计本节将对数据库进行逻辑设计,根据推荐引擎的整体功能的设计和电影网站的功能设计,系统数据库的整体逻辑设计如图4.3所示。 第4章系统需求与设计PK用户登录账号用户姓名密码登录时间年龄性别评推荐图4.3数据库整体逻辑图推图4.3是推荐引擎的数据库设计,在数据库设计推荐表是推荐引擎需要直接访问的信息表,其余表是需要间接访问的表。4.3.2表设计根据上节对数据库的逻辑设计,本小节对各个数据表进行设计,数据表结构进行设计如下各表所示。1)用户表的设计如表4.5所示,存储了与用户相关的信息,有作为主键且唯一的用户编号、注册信息和登录信息等。表4.5用户表、●■、m㈣二~!。2—1j一:。澄蠢i攀i鬻誊j≥涿毽爹滋荔鬻j渤鬻j差萋i攀藜j霉英囊列名j藿攀霉豢激据粪型。毒i鏊用户IDuserIdint是7f:口用户登录账号USemamevarchar否7RIc::l用户姓名namevarchar否否密码passwordvarchar否不口登录时间lgtimechar否否年龄ageint否否 第4章系统需求与设计2)表4.6是电影表,有作为主键且唯一的电影编号、电影图片存放在数据库的地址和电影的详细信息。表4.6电影表t’}、、_r,■一。”尊=_ni釜磁蒸誊蘩囊寨:汐K镰熬萋鬻鬻蕊蘩洌聋粪囊纛鍪i≯戆囊翼夔歹Ⅱ名鎏粪鬻;誊。。II;数据类型叠≤。瑟戮:电影编号filmIdint是否电影名字filmNamevarchar否否电影价格filmPricefloat否否电影简介filmSynopsislongtext否否图片地址flmUrlvarchar否否排名filmRankint否否3)表4.7是推荐表,包含了唯一的编号,电影ID,用户ID,推荐值和时间。电影ID和用户ID是两个外键,推荐值和时间是离线的推荐算法产生的。表4.7推荐表Y0-g‘≥j:j?4~’』。毫;.溉I¨搿。舞:赢■曩甄。一i耋■7j攀建鬻雾≥霪鬻i葶辩鹾;蓊鬓然瀵蔓刿名?;漤豢“数据类型誊j攀爹”.编号idint是不口电影IDfilmldint否是用户IDuserldim否是推荐值recommendfloat否否时间dateTimechar否否4)表4.8是电影用户表,主要用于用户对电影的评价和评分,有唯一的编号、电影ID、用户ID和用户对电影的评分、评价、操作和时间。表4.8电影用户表『:瀛麟;麓繁漤列名jj,英文列名萋数据类型_l主键≤。0≥曩j编号idint是否电影IDfilmldint否是用户IDuserldint否是电影评分filmScorefloat否否电影评价filmEstimateIongtext否否操作operatevarchar否否 第4章系统需求与设计4.5系统设计针对前几节的需求分析,结合电影推荐网站的特点,进行相关的细节上的设计,并将系统的架构分为如图4.4所示的三个层次结构:电影信息、个人数据集推荐结果信息图4.4系统结构设计图算法层对于一个推荐系统而言,是最关键的,算法层输入是目标用户的参数和数据集,输出是推荐列表。在这个电影推荐系统中,分离算法层可以使系统中的算法与逻辑分离。表示层是推荐系统与用户直接交互的部分,即用户接触的前台页面,主要负责将系统计算出来的推荐电影通过WEB网页美化后进行展示,将结果推荐给用户。存储层提供基本的数据存取服务,包括用户信息记录的数据集、模块之间产生的中间数据结果。系统通过对原始的电影评分数据进行数据采集、为推荐系统提供数据支持,产生相关矩阵等中间过程数据,结合第三章中提到的分布式推荐算法,产生最后的推荐并展示给用户。 第4章系统需求与设计4.6功能模块的划分基于Hadoop的推荐系统主要面向中小型企业对个性化推荐的需求,考虑到系统的易用性和稳定性,结合推荐系统和Hadoop的特性,确定了三大功能模块,分别是推荐算法模块、用户相关模块和分布式模块,如图4.5所示。一黼图4.5功能模块图通过上述的功能图可以看到本项目的主要模块,如下将对主要功能做出简要的说明。4.6.1推荐模块设计推荐算法模块是系统中最重要的模块,主要有三个部分组成。1)数据收集推荐系统需要有大量的数据作为计算的基础,数据的来源可以分为几个部分:①某个用户对某个电影的评分情况②从系统日志中提取的用户行为数据③从一些其他电影网站收集到的电影评分数据从系统提取的日志主要解析出用户对电影的浏览、搜索情况,根据需要转化为推荐热度或者其他指标。同时,系统从数据库中读取用户对电影的评分。 第4章系统需求与设计2)推荐引擎推荐引擎是基于Hadoop的电影推荐系统的核心,将数据收集模块收集到的信息作为输入,经过推荐算法组件处理,生成一系列的推荐结果。推荐引擎由离线计算和在线计算两种模块组成,离线计算的结果存储到数据库中,而在线模块主要负责对一些新注册用户的推荐,给予最热门的或者最关注的电影推荐。这个模块的设计需要考虑如下几个方面:①能够给新注册的用户推荐电影②离线推荐引擎运行过程中不能影响电影网站的使用3)推荐结果处理模块设计在步骤2中根据推荐引擎得出的推荐结果,有些只是短时间内比较流行,需要进行进一步的筛选才能提供给用户。推荐系统的目的是要提高服务质量,提升用户的体验,排除一些影响服务和体验的数据,比如那些被认为不会受到的用户关注的电影。这里包括以下几个步骤:过滤,排名,推荐。需要过滤的电影通常是以下几种:①用户已经看过或者用户表示过不喜欢的电影,需要过滤这类信息,是为用户做出较好推荐的基础②根据推荐引擎推荐的电影有时候也可能产生一些不合理的结果,这些不能考虑到用户的推荐备选电影中,需要排除③还有一些电影已经被后台定义为不合格或者不适合推荐的电影需要过滤掉,这是提高用户体验和服务质量的重要保障4.6.2用户交互模块设计提供一些数据交互接口,其主要功能是从用户收集在线的行为和用户的直接反馈信息。然后是对推荐的结果进行处理,由于推荐的结果只是ID和评分等,用户交互模块需要从数据库中查找推荐电影的具体信息,一并返回给用户。在众多电影中寻找到用户需要的电影比较困难,用户可以根据部分关键词搜索一些电影的详细信息并进行评分和评价。本系统需要用户登录后才能为其推荐电影,当未登录用户进入电影网站时,提示其进行登录。如果用户为注册,则可以通过注册界面进行注册。对于新用户,系统要求其对30部电影进行评分。4.6.3分布式系统模块设计系统管理中核心部分,它为推荐系统提供数据集管理,并负责集群中的节点管理,包括节点的监控、MapReduce任务执行的管理等,具体如下:①数据集管理:系统中用到的数据集,主要将数据库的数据传输到HDFS和将HDFS的数据存储到数据库中。 第4章系统需求与设计②集群管理:监控系统中各工作节点的状态,空间使用情况。③任务管理:查看集群中任务执行的状态,MapReduce任务的执行情况④定时器:在大量数据的情况中,本系统设定在每天晚上3点运行一次所有数据的推荐算法,将推荐结果存于MySQL数据库中。4.7本章小结本章主要对基于Hadoop的电影推荐系统的需求进行分析和描述,确定了系统的目标,对系统的结构进行了设计和对每个用例进行了详细的介绍和分析。接下来对基于Hadoop的电影推荐系统进行了总体设计,将系统分为算法层、表示层和存储层,同时从逻辑上和表结构上完成了数据库的设计。最后划分了模块,并对各个模块做了详细地分析和设计。 第5章实现与测试5.1系统环境搭建第5章实现与测试软硬件环境:本课题目的是实现一个适用于中小型企业的分布式推荐系统的模板,因此选用常见的软硬件平台。硬件环境:本系统采用3台PC机组成集群环境,配置是IntelQ9500处理器,cPu主频为2.83GHz,硬盘为500G,内存为4GBDDR3。将其中一台机器作为主服务器(Master),其余的都作为从服务器(Slave)。软件环境:操作系统:LinuxUbuntul2.04数据库:MySQL5.5.4lJava环境:JDKl.7Web服务器:Tomcat7.0.40MVC开发框架:SpringMVC3.2.0集成Hibenate4.1.6Hadoop版本:Hadoopl.2.1开发平台:MyEclipse8.65.1.1SpringMVC环境搭建JDK安装:①在Oracle官网下载jdkl.7,下载至lJ/home/hadoop/Downloads/②切换到root用户,root是最高权限的用户,有利于后续步骤的文件操作,输入命令:sudo⋯su③创建目录蘸秘蕊④进入/usr/lib/jvm目录,将jdk.7u75.1inux.i586.tar.gz解压到/usr/lib/jvm,输入命令:麟獭纛懒鳓谶黼馘㈧渊翰谶戮躐巍麟⑤配置环境变量鞴穗弑瓣 第5章实现与测试添加Java环境变量,在”/etc/profile”文件的尾部添加以下内容:育番磅蒜麓警鬻磷糍}燃麓瓣≮纂鞲辫疆蠢i辫骥釜蕺器e鞠aVa懑nVl∞疑m】Bnl黼麟粼黼灏粼麟戮谶减镳藏使环境变量生效戮戮黼鳓赫⑥验证.jdk是否安装成功瓣鲻㈣灏#瓣#黧蠹耩l鬻薹j垦V磊鬻§零ls≥Qn会出现idk的版本信息如下,如出现不是自己安装的版本,需要执行步骤7手动设置的系统默认JDK。J邑V邑version什1·7·0一了5什Java(TM)SERun七imeEnviro-8_men七(b%lild王·7~一75一b13)JavaHotSpotr列lClien七Ⅵ哇(build24.75-b04,mixedmO—de)⑦手动设置JDK黼潺戮躐㈡麟颡谳阚谶黼黼㈧缫鳓溯溺渊躐燃缫獭粼黼谳㈧颡磷淄黼鬻黼润磷黼谶㈧谳鲻谶麟糍鬻粼戮鬻瓣Tomcat安装:①在官网下载Tomcat压缩包,例如apache—tomcat一7.0.59.tar.gz,下载到/home/hadoop/Downloads②进入至g/usr/local目录下,解压apache-tomcat-7.0.59.tar.gz生成apache-tomcat一7.0.59文件夹,建议改名为tomcat7,这样便安装完成。sudo:tar二黼叠獭遴戮潲若鬻D潲h翩毋茹溺6鬻麟黼潞蒋淄s谴o『一醢Ⅳ醚acr麟^o巍c磷7.0:559to;mcat7③配置Tomcat环境变量,打开profile文件,输入命令:鳓do:鬻imletc/profile向profile文件中添加以下内容后,保存关闭。#set{omcat黼南d戮色毹exportCATALNA:_HOME-/usr/bcal/tomcat7expo随CATALINA;BASE渤sr/local/tomcat7exportPATH=:$CATAL闲A_HOME&in!$PATH④使用以下命令重新运行profile文件: 第5章实现与测试§艿舀黼i萝舔囊随澈奄⑤修改/usr/local/tomcat7目录权限鞲戮鬻鞲鞴遵戮霪獭鬟鬻黼⑤启动Tomcat服务:用bash脚本启动Tomcat服务,输入如下命令:$瓣矗黼舀渐i,‘0,”4■、运行startup.sh的结果如下所示:图5.1Tomcat启动成功⑥检测Tomcat服务是否开启:在打开浏览器内输入localhost:8080或htcp:#127.0.0.1:8080(默认端口8080)后,出现了tomcat欢迎界面则表示Tomcat服务器安装运行成功。蹦An矗0弧翟Tom糕{孙钟洲掣a雀缁静#M墨塑羔罡旦些盐5。e嚣·#t0i槲∞掀:融±^≤00●c时u~H瑁t‘一n⋯r-_、#T÷罩∞:?=a:错话≈蠹《,0j:i0=’蔷1暑崩::·《赫#ti§黼÷、.o警t5_’,,*,!i÷a口nj:螳R州时seNotes鱼盐坚凼MiqralionGuide沁uritvHotic._es、—‘麓pa。ch。。⋯Soft。wa⋯reF。o:絮紫”1{|}I_囊≯。jj羹譬冀∽曩。。算?鬻j器囊≥琴鬻ji冀薯;誓≯。一霉?’曩,,。,j!M搿i蔓。.曩薹蔓ij囊女。嚣黧;i≥薹毫.≥£|_j。。!i:!童"凇端黜^##旦盥置翌、墨’:!。:篓=⋯,00cI】111。。-Ind“on.T..o...m....c.,a..t...7.....0....D..o...c...u..m.....e..n...1.a..fi..—o—ll塑卫旦LL堡曼型堕坐出啦TomealWIkJ:⋯二二o::⋯j、jj:,;’l{=。5二j■^4“=1lc^TuI~HN自⋯n!一抖”j5i,。一."f’#70}o:㈨'‘’’‘’’0{一-0Y,:兰∑羔二生生羔三=竖型图5.2服务器安装成功图4l0搬m0Help嫩删型查!i!坦土超§!*t枯i;¥州:g#H;?10‰。撕jjj¨a£弑2■E《‘目¥∞‘黼n《日%i搽#≈K㈣i“女^t样凇#钳¥《鼎“《椒“《&抽蝴:i撇"扎Pw;㈣tom㈣∞⋯、。c'_Ⅻ∞∞F∞。m,zⅫ。j‘一*㈣竖§≥三丝"㈣#躺⋯。*。?j、,~ba:⋯~‘⋯x∞ 第5章实现与测试MySQL安装:①在Ubuntu操作系统中,在联网的情况下输入命令运行:黼瑚糙黼鞭溅黼赫辫爹词颡≮道Ubuntu操作系统会自动下载并安装MySQL数据库的服务器端和客户端到本机。②默认情况下,MySQL的根用户没有初始密码,输入命令:“矗蛳F;《jv膏i舅i.警_j墨jw.iii--ij|jiy§qli鳓;—【::}舀t;攀随后输入安装过程中设置的密码后,会出现如图5.3的界面,可以看到MySQL的版本信息。图5.3MySQL进入界面③添加所需要的数据库,建立数据库dbfr2u,命令如下:×崩硝。善#‘。=一。oo舭■“t一。#’’*oo,十一}j1;7‘m蕈鲻1鬻CRE勰ED臀E粕ASEdb舵tf:④最后在数据库上建立本课题所需的表,包括用户表、电影表、推荐表和用户电影表。5.1.2Hadoop环境搭建SSH安装:SSH全称为SecureShell,即安全外壳协议,我们可以通过SSH协议在Hadoop的集群中加密传输数据,防止DNS、IP等欺骗,可实现Hadoop节点之间的免密码登陆并执行命令,大大提升系统的便捷性与安全性。因此,Hadoop选用SSH作为免密码登录工具。在Ubuntu系统中设置SSH步骤如下:①在联网的情况下输入命令安装SSH服务:”7t⋯·一_og⋯1sudbapt-get;|m誊落ll。遂h②查看在hadoop用户(本系统用户名为hadoop)下是否存在.SSh的隐藏文件夹,输入以下命令:l鹫鬻j流黼蠢甜蕾如果没有.ssh目录则新建.ssh目录,输入以下命令: 第5章实现与测试纛戮翻③接下来,创建ssh.key,输入以下命令:戮糕鬻鬻黼其中,ssh-keygen为生成密钥;-trsa为指定生成的密钥类型为rsa,即使用rsa认证方式:.P为提供密语。执行该命令后会在.SSh目录下创建idrsa和idrsa.pub这两个文件,它们是SSH的一对私钥和公钥。④把id_rsa.pub(公钥)追加到授权的key中去,输入命令:i嚣溪囊矗瑚鎏;a童谶≥喾砑.sj鳞uthoriZed2keys至此免密码登录配置完毕。⑤验证SSH是否已经安装成功,以及是否可以免密码登录本机。输入命令查看版本信息:s§矗叫爵sion显示结果:OpenSSH_5·9plDebian一5ubuncu!·哇,OpenSSLl-0·生14Mar2012Badescapecharacter’=sion’.表示SSH工具已经安装成功。Hadoop集群安装:Hadoop要求所有机器上Hadoop的部署目录结构相同,并且都有一个相同用户名的帐户hadoop。集群中共有三台机器,一台Master,两台Slave,节点间局域网互通,p分配如下表:表5.1集群IP分配表_o~一”≤毫-一.-v;jj掣机器名移i薯jj?蕾j?。i礤曩j篝攀≥、j雾黪i囊i蓍薹。。霉i鍪羹鬻蠢ii黎i簿;i蒸≤妻master192.168.1.10slavel192.168.1.11slave2192.168.1.12如果三台机器不是上表分配的名称,则需要修改。可以通过使用sudovim/etc/hostname命令修改hostname文件,把它改成规划的名称。同时修改三台机器的IP地址,将它们设置成固定口,命令如下:§胡&鬻i镒。舱t黼黼黼谥蔷髓蔷j将interfaces编辑如下内容: 第5章实现与测试autoeth0if邑c:eeC垫0inetstaticaddressi92.168.81.!OneCzn悬isk2SS.25S.255.0在进行集群配置中,为了Master与所有的Slave机器之间不仅可以通过P进行通信,还可以通过主机名进行通信,需要在”/etc/hosts”文件中添加集群中所有机器的IP与主机名,因此在所有的机器上输入命令§鞭通稽鬻鬻l游缮鬻拳辩在文件末尾中都要添加如下内容:如果使用主机名能够相互ping通,说明安装Hadoop的准备工作完成。接下来进行Hadoop的安装。①官网下载hadoop.1.2.1,下载到目录/home/hadoop/Downloads②进入Hadoop安装目录/usr/local,并解压hadoop.1.2.1.tar.gz黼瓣㈧嗣鬻攀谶f黼簿鬻獭舀章黼嗣嗣骥戮罐霾辫辩薛③将解压出的文件夹重新命名为hadoop打开hadoop/conf/hadoop-env.sh文件,配置JA、,A—HOME找至1]#exportJAVAHOME=⋯,去掉拌,然后加上本机jdk的路径鬻湖潮鞘鬻@麟鬻戮黼囊蓟蘸鬈霞缫④打开conf/core.site.xml文件麟㈣黼霹谶鬻麓鬻黼l配置的信息如下:r王2eee七VV3&&Il|,一1一mssO主2々.I,o主●●●{▲,_I,工888666t土气_.,-I222999,‘,,I王 第5章实现与测试⑤打开conf/mapred.site.xml文件fs.default.name</name>hdfs:/j7master:9000</value></property>Hadoop.tmp.dir</name>/usr/iocal/hadoop/tmp</value></propefly></configuration>潮黼辩戮蕊鞠獭鬻藏配置信息如下:⑥打开conf/hdfs.site.xml文件黼燃㈤黼黛鬻谶颡配置信息如下:dfs.replication</name>2</value></property>dfs.name.dir</name>lusrllocallhadooplhdfslname</property>《property>dfs.data.dir</name>/usr/Iocal/hadoop/hdfs/data</value></property></confiquration>45 第5章实现与测试⑦打开conf/masters文件,添加作为secondarynamenode的主机名master。⑨打开conf/slaves文件,并添加作为slave的主机名,一行一个,添加slavel,slave2。⑨添加hadoop环境变量l馘麟鞠黼黛,添加如下环境变量黼剿糊黼潲谳黼潮戮攀黼鞫舔瓣嘲懋蜥磷鞠⑩改变hadoop安装目录权限i谶湖蘩鞘缀鞭㈧鬻麟上述步骤讲的是master主节点上Hadoop环境变量的配置方法,接下来需要部署到另外的两台实验机器上,方法与上述的步骤基本~致,目录结构也要一致。完成了Hadoop平台的搭建后,运行Hadoop集群,首先格式化namenode,进入“/usr/local/hadoop/bin”目录,执行命令:Sad6蚕毒j氡al订eh6de筵羹l秘a猷这个命令可以在dfs.name.edits.dir下创建Hadoop启动的必需文件和目录。5.1.3自动安装脚本实现由于配置Hadoop存在一定的难度,也比较耗时。本课题编写了一个脚本可以自动化配置Hadoop,将配置好的jdk、hadoop和脚本置于同目录后,只需要在每个节点上以root权限运行一次脚本就可以完成安装,脚本如下: 第5章实现与测试47 第5章实现与测试5.2系统功能实现5.2.1推荐模块实现在编码时采用层与层分离的方式,根据上一章中的描述,将算法层、表示层、存储层分离,数据集DataSet直接存放在HDFS分布式文件系统中,用户通过前台页面与控制器交互传递参数,数据形式采用实体类的方式,在层之间进行传递。电影项目的相似度是系统中一个比较重要的部分,其作用是为了计算待推荐的电影之间相似度,相似度较高的项目作为待推荐的项目,本课题选用3.4所提出的并行化的基于项目的协同过滤算法。对于基于项目的分布式协同过滤算法的MapReduce实现分为四个阶段:1.建立用户对物品的评分矩阵;2.建立物品的同现矩阵:3.合并同现矩阵和评分矩阵;4.计算推荐结果列表。该算法的每一个阶段都是由一系列的Mapper和Reducer的衍生类完成,主要工作是实现Mapper类的map方法以及Reducer类的reduce函数,下面将实现电影推荐引擎,使用MapReduce的编程方法实现这核心的四个阶段。1)建立用户对物品的评分矩阵按用户分组,计算所有物品出现的组合列表,得到用户对物品的评分矩阵,将输入的行userlDitemlDscorc处理为userlDitemlD:score,itemlD:score⋯伪代码如下:2)建立物品的同现矩阵对物品组合列表进行计数,建立物品的同现矩阵,伪代码如下:—隳翻攀渊鬻黛露攀雾纛黑蘩黧I豳 第5章实现与测试3)合并同现矩阵和评分矩阵合并同现矩阵和评分矩阵,伪代码如下:4)计算推荐结果列表计算推荐结果列表,伪代码如下: 第5章实现与测试i戮纛黧i鬻羧孽鍪麓Cooccurrenceco=Matrix.get(kemlD).get(i)。2≥荸|context.write(userlD+’iTI,co.getltemID20+”,”斗pref4宅o:getNUmO)鍪?。j?,。_I;誊¨{j磐Reduce:『。‘i。l戮∥瀵鬻蘸攀攀鬻鎏liFor擎然囊!粪萋valuj|eisstriiii萋萋爹澄?鬻i攀鬻鬻誉爹饕鋈霉鬻鬃蒸_arrary=split(value警豢鬻攀≯鬻_毪1:“。‘.)鸶爹囊攀li寨l攀爹iii』爹蜜鬻瓣辫≤鬻攀熟蓊瀵黉繁鎏篓i、j;j譬挲ji攀爹rie‘su。lt};.puit(str蓠[O]。,篝Do誉uble.parseDouble(str[1]))曼。:∞。i《。≯一i二篓Iteratoriter2resu。lt.keySetO-i。te’缈0一篡。..:。基爹爹i篆鍪?爹!ite“mI’Dij?鬻渤te萋r.ne豢xtO霎;笺萎i?菱豢瀵:ji鎏如图5.4是基于Hadoop的推荐系统的首页,在用户登录后,首页上显示的3部电影都是基于用户的行为计算后推荐给用户的。簪鼗。0“树hm☆扛毒★拳-“?冉。强图5.4推荐系统主页50 第5章实现与测试5.2.2用户相关模块实现与用户相关的模块主要是数据收集模块和用户交互模块。这些模块中包含用户注册,用户登录,用户评分、评价,电影的推荐结果展示等功能。以下将列举登录推荐功能的流程图和核心代码。当用户未登录时,推荐给用户最热门的电影;当用户登录后,根据数据库中的推荐结果,给用户推荐电影。具体流程如图5.5所示:◇_;宣图5.5用户模块流程图判断是否登录,选择不同的推荐电影,核心代码如下: 爹r菁Liest.s蔷菠韵bute黼lmliSi!i;。:filmljst)囊|。ji曩)‘?Listtop!ii!=6ImMan、ager.getFilmByScore50簿。。?reques;t:setAttribute(”toplist”,toplis0;登录验证代码如下:≥userd;;÷:us;r丽anag邑r鬻etuserB萝Name(u§爸iName);。HttpSessionsessi0112r(eques‘·ge‘SessionU;:|受≥t势。一鬈l≯l≥l≯≤鬻j。‘iffuser.getPassword0.equals(password)){『j豢request.setAttr一‘⋯。U。se—uSe盼。誊|l攀蠢。≯segsion.se;Mtribute(’'Usersession”,user.getUserName0);return”redirect:/indexl’;?_j、o:。;、}else黪?。I擎囊叠”誊誊弘?鬻爨return”/lO誊in”;一。魏国获得用户的评分评价核心代码如下::if(rec01TImenaManager.updateRecomnlend(recommend)){recomraend:recormnendManager.getRecollllmen.:.d(recomnmend·gefld0);request.se{Aiti‘ibute(ilrecolnmend”,recommend)≯。。return”/editRecommend¨;ioelse{return以下是/error,’:鬻鬃茎燮燮燮i燮鬟霪52囊 第5章实现与测试图5.6登录界面5.2.3分布式系统相关模块实现图5.7用户评分评价界面由于离线推荐需要在特定的时间范围内处理,我们设定每天晚上3点进行离线分析,本课题选用Ubuntu自带的定时器的CFOD,如下是定时器的配置方法:①打包在Hadoop平台上开发的基于项目的协同过滤算法,命名为alg.jar②将alg.jar和相关的lib库文件夹一起放在/home/hadoop下⑧编写shell脚本,命名为crorl。sh}}导入j不境变量exportLANG2”eli—US.UTF一8。’export)心氏一HOME2/use。/Iib/jvm/jdkl.7.0—75expo_l‘tPATH2SJAvAjfOME;‘bin:SPAl、HexportCLASSPATH=.:$JAVAHOMEb/'dt.jar:$JAVAHOMEb,,"tools.jal‘ALG—HOME=/home/hadoopecho”["date+%Y_%m.%d一%H:%M:%s、1开始执行定时器⋯¨I’cd$ALG—HOME&&echo”进入目录:$ALG—HOME“i譬≥。jjava-jar$ALG,HOME/cron.jar&&echo”执行;ron.jar完成!”≯jiij∈cho¨I【’date+%Y_%m一%d孙H:%M:%S’】定时器运行完毕,等待下次执行.’’j53 第5章实现与测试④在终端输入crontab-e,调出定时器设置的vi界面,输入以下语句:嗡缫氅确试酎h嗣舀粼鳓黼K骖渤m娟蠢d两黼颐粼。套这条语句的意思是在每天3点运行cron.sh脚本。5.3实验分析5.3.1实验介绍本课题在Hadoop上实现了分布式的基于项目的协同过滤算法,为电影网站提供个性化推荐服务。将采用数据挖掘实验中常用的MovieLens作为数据源,该数据包含MovieLens网站上用户对电影的评价记录。本次下载的数据共有90571条评分记录,如下表所示:表5.2MovieLens数据量用户数量电影数量评分记录数量5010844855200142017748400154240318800167177533943168290571选取50、200、400、800和943个用户作为实验数据。5.3.2实验评估方法为了验证本文的算法推荐的精确性,采用一种简单的评估方法——平均绝对误差MAE[511,MAE通过比较项目的实际用户评分和算法的预测分的绝对误差来衡量算法精确度,若MAE的值较小表明算法比较接近用户的实际兴趣,算法精度越高。MAE的计算公式如下5.1:∑n,tIpl-p2lMAE=——(5.1)优其中,脚表示项目的数量,p1表示实际分数,p2表示预测分数。5.3.3实验结果在配置的实验环境中对基于项目的分布式协同过滤算法进行实验,得到如下的实验结果。在不同条件下算法的响应时间如图5.8所示: 第5章实现与测试图5.8响应时间其中,横轴表示用户数量;纵轴表示响应时间,以分钟为单位。图中可见,包含两个节点的Hadoop集群与传统的基于项目的协同过滤响应时间基本一致,包含3个节点的集群响应时间明显优于单机模式。2个节点时,节点除了需要执行计算任务,还要负责集群的调度。如果使用更多的节点,计算速度会更快。由于MAE值与分布式规模大小无关,故本实验只比较单机和分布式条件下MAE值的区别,算法的MAE比较如图5.9所示:图5.9MAE比较可以看到在数据相对稀疏的情况下,分布式的算法没有单机模式的算法效果好,而随着数据量的增大,两者的差别不大。 第5章实现与测试从以上的两个实验中,可以得出运用基于项目的分布式协同过滤算法在计算时间和MAE有不错的效果,随着集群的增大,给予用户更快的反馈。5.4系统测试与结果本课题研究的推荐引擎是为电影推荐服务的,主要是为中小型企业的应用的推荐平台的搭建提供一种解决方案,为此本课题提出了一种推荐引擎的搭建模板,并基于此模板搭建了一个推荐引擎的原型系统。在该系统的重点是推荐引擎的数据处理能力和并发性能。但因为离线处理子系统是基于Hadoop开发,Hadoop平台的计算能力得到业界的一致认同,因此不再对此项进行测试,上而只对系统的并发性能进行相关测试。除此之外,还需要对推荐系统的功能进行测试。5.4.1测试环境本节对推荐系统的功能和性能进行一些测试,测试的软硬件环境如下表5.3所示。表5.3测试软硬件环境潮黼嚣蘩篱ii瓣鬟鬻鬟硬件在线推荐分布式集群三台PC,四核,内存4G个人PC双核,内存2GJDK1.7软件Hadoop1.2.1PC操作系统Windows7浏览器Firefox365.4.2功能测试本课题研究的是一个适用于中小型企业的推荐系统模板,故需要实现各个模块的功能,本节中将对各个子系统进行测试,测试功能是否实现,是否存在问题。表5.4功能测试表渐栽囊舞鬓黉瑟鬟溺鬻瀵鬻巍瑟旁懑鬻戮i爱霪鬻鬻i饕篓蘩灏0鬻测断准利豢鬻;鬟鬻蘩寨§鬻日志收集浏览,评分等操作项推荐系统中数据表存在用户的这些操作离线数据分析将用户行为数据上传到离线数据分析程序将生成推HDFS,在Hadoop中运行分荐结果,并将结果存到数据析离线数据程序库 第5章实现与测试I在线推荐在电影推荐系统中进行大量用户大量操作时功能正常,评分,浏览操作推荐的项目会有不同对推荐系统各个模块的测试,所有的用例都通过,测试全部满足预设的结果,表明这个推荐系统的功能符合设计需求。5.5本章小结本章利用分布式协同过滤算法实现了基于Hadoop的电影推荐系统。详述了WEB环境和Hadoop环境的搭建,这些都是实现推荐系统的基础,Hadoop的分布式环境搭建需要一定的时间和经验。同时实现了第四章中提出的系统设计,完成了算法的编码,页面的制作和SpringMVC框架下的编程。最后对推荐算法和基于Hadoop的电影推荐系统进行了实验和测试,结果符合预设的要求。 第6章总结与展望6.1本文总结第6章总结与展望Hadoop是并行计算中一个重要的平台,以其高可靠性、高扩展性、高效性和高容错性的优点,被较多的企业和学校使用和研究。随着网络技术的发展和移动终端的普及,可以随时享受到Hadoop带给的强大计算能力。本文在Hadoop广泛使用的背景下,将相关技术应用到网站建设中,使网站具有更强大的功能。将Hadoop和推荐系统相结合,为用户提供更好的推荐服务。本文具体的工作包括:(1)介绍与本文相关的Web服务的概念、理论和技术。着重分析了Hadoop的中HDFS和MapReduce的操作和相关技术,SpringMVC中MVC设计模式优点,并将其应用到电影推荐系统中。(2)详细地介绍了一些推荐算法的理论依据、推荐过程和关键技术,综合比较了不同算法的使用条件、优缺点后,选用基于项目的协同过滤算法。(3)介绍了基于Hadoop的电影推荐系统的实现步骤,包括需求分析、系统设计、模块设计、功能实现和系统测试。(4)将基于项目的协同过滤算法并行化,使它能够在Hadoop上运行,使系统具有处理海量数据的功能。(5)编写了Hadoop自动化安装脚本,减少了安装流程和很多重复命令,使Hadoop安装更为简单、快捷,减少了中小型企业搭建平台的难度,降低了应用门槛。6.2工作展望本文完成了一个基于Hadoop的电影推荐系统的项目,但是由于实验条件和研究时间有限,存在以下不足,可作为后续的研究方向:(1)研究生实验室条件有限,无法组成一个大规模的集群,体现Hadoop处理大数据的性能。(2)本文的数据存储于MySQL数据库中,而一些大型的网站主要使用的是HBase这样的分布式的、面向列的数据库。在Hadoop中,存在海量的结构化数据,使用HBase可以提高效率,因此在后续研究中可使用HBase的存储方式。(3)本课题在实现过程中,界面不够美观,可改进页面设计来提升用户体验。 参考文献参考文献[1]邸菁,贺博,汤刚.我国移动互联网产业现状及发展趋势[C】.宽带中国战略与创新学术研讨会.2012.[2】中国互联网络信息中心.第35次中国互联网络发展状况统计报告【J].互联网天地,2014,(12).[3】蔺丰奇,刘益.信息过载问题研究述评[J].情报理论与实践,2007,30(5):710.714.[4]于文莲.网络环境下的信息过载研究[J].农业图书情报学刊,2008,20(11):51—54.[5]Bawden,D.InformationOverload.Library&InformationBriefings[EB/OL].http://litc.sbu.ac.uk/publications/lframe.html.[6】李斌.推荐系统研究综述[J].现代计算机:专业版,2014,(2):7.10.[7】GOOGLE.谷歌三大核心技术(一)GoogleFileSystem中文版【DB/OL].http://www.open—open.com/lib/view/openl328763454608.html.2012—02.[8]GOOGLE.谷歌三大核心技术(二)GoogleMapReduce中文版[DB/OL].http://www.open-open.corn/lib/view/openl328763069203.html,2012—02.[9]GOOGLE.谷歌三大核心技术(三)Google_BigTable中文版[DB/OL].http://www.open—open.com/lib/view/open1328763508092.html,2012—02.[10】赵铁柱,袁华强.基于并发策略的分布式文件系统性能优化方案[J].网络安全技术与应用,2013,(7):17.18.【11]李延光.基于Hadoop的海量工程数据处理技术研究[D】.北京交通大学,2013.[12】项亮.推荐系统实践[M】.北京.人民邮电出版社,2012.[13]ResnickP.GroupLens:AnOpenArchitectureforCollaborativeFilteringofNetnews[J].ProceedingsoftheACMConferenceonComputerSupportedCooperativeWork,1994:175.186.[14】顾丽敏.个性化推荐系统研究[J】.无线互联科技,2013,(8):53.53.【15]FosterI,ZhaoY,RaicuI等.网格计算和云计算360度比较[J].数字通信,2010,(3):32-36.[16]Wikipedia.ApacheHadoopWikipedia[EB/OL].http://en.wikipedia.org/wiki/ApacheHadoop.[17】郝树魁.HadoopHDFS和MapReduce架构浅析[J】.邮电设计技术,2012,(7):37.42.【18]胡涛,路红英.基于Nutch的搜索引擎的研究[J].计算机时代,2007,(1):57.59.[19]朱珠.基于Hadoop的海量数据处理模型研究和应用[D].北京邮电大学,2008.【20]陆嘉恒。Hadoop实战[M]。北京:机械工业出版社,2012.59 参考文献【21]许丞,刘洪,谭良.Hadoop云平台的一种新的任务调度和监控机SO[J].计算机科学,2013,40(1):112.117.[22]FerrisC,FarrellJ.WhatareWebservices?[J].CommunicationsoftheAcre.2003,46(6):31-31.[23]HaasH,BrownA.Webservicesglossary[J].W3CWorkingGroupNote,2004,(9).[24]PapazoglouM.Webservicesprinciplesandtechnology[M].Addison—Wesley,2008.[25】罗丽娟,陈永政.浅谈MVC框架模式[J】.科学咨询,2013,(4):12.13.[26]陆荣幸,郁洲,阮永良等.J2EE平台上MVC设计模式的研究与实现[J].计算机应用研究,2003,20(3):144.146.[27】百度百科.SpringMVC[EB/OL].http://baike.baidu.corn/view/1834982.htm[28]张瑞青,李铁柱.基于SpringMVC的用户登录系统的设计与实现[J】.科技信息,2012,(10):246-247.[29]百度文库.精通Tomcat百度文库[EB/OL].http://wenku.baidu.com/view/038acbea6294dd88dod26b5£html【30]蒋波,任继念,崔蔚.Tomcat结构分析【J】.教学与科技,2013,(4):6-10.[31]傅刚.Linux平台的MySQL数据库操作与创建[J].中国科技信息,2005,(17):74.74.[32]KOFLER,Michael.ThedefinitiveguidetoMySQL5[M】.2005.[33]ResniekP,VarianHR.RecommenderSystems.CommunicationsoftheACM,1997,40(3):56-58.[34]李俭霞.电子商务智能推荐技术及应用研究[D].重庆大学,2009.[35]TuzhilinA.TowardstheNextGenerationofRecommenderSystems[C].Proceedingsofthe1stInternationalConferenceonE—BusinessIntelligence(ICEBl2010).AtlantisPress,2010.[36]李晓昀,余颖.推荐技术的研究与探讨[J】.计算机时代,2009,(11):6.8.[37]Lieberman,H.Letizia.Anagentthatassistswebbrowsing[C].In:Burke,R.,ed.Pro·ceedingsoftheInternationalJointConferenceonArtificialIntelligence.MenloPark,AAAIPress,1995:924—929.[38]MladenicD.MachinelearningforbetterWebbrowsing[J].AaaiSpringSymposiumTechnicalReportsonAdaptiveUserInterfaces.MenloPark,CA:AAAIPress,2000:82—84.[39]PazzaniM,MuramatsuJ,BillsusD.Syskill&Webert:IdentifyinginterestingWebsites[J].ProceedingsoftheThirteenthNationalConferenceonArtificialIntelligence,1998,23(4):54—61.【40]AgrawalR,ImielinskiT,SwamiA.MiningAssociationRulesbetweenSetsofItemsin60 参考文献LargeDatabases[J].INPROCEEDINGSOFTHE1993ACMSIGMODINTER.NATIONALCONFERENCEONMANAGEMENTOFDATA,WASHINGTONDC,1993:207.216.[41]赵丽嫂.一种新型的协同过滤推荐算法[D].南京邮电大学,2013.[42】李敏,姚昕,李红.基于自律计算的市场购物篮分析[J].哈尔滨商业大学学报:自然科学版,2013,29(1):76。78.[43】华锐.神奇的关联分析[J].调研世界,2013,(7):65.65.[44】顿毅杰.关联规则挖掘中的Apriori算法浅析[J].中国科技信息,2009,(22):84。85.[45]T振IN,陈静,基于关联规则的个性化推荐系统[J】.计算机集成制造系统,2003,9(10):891-893.[46]BreeseJS,HeekermanD,KadieC.Empiricalanalysisofpredictivealgorithmsforcollaborativefiltering[C].Proc14thConfUncertaintyinArtificialIntelligenceMadison,1998:43.52.[47】AdomaViciusG,TuzhilinA.Towardthenextgenerationofrecommendersystems:Asurveyofthestate·ogthe-artandpossibleextensions[J].IEEETRANSACTIONSONKNOWLEDGEANDDATAENGINEERING.2005:734.749.[48]AhnHJ.Anewsimilaritymeasureforcollaborativefilteringtoalleviatethenewusercold—startingproblem[J].InformationSciences,2008,178(1):37-51.[49】肖强,朱庆华,郑华等.Hadoop环境下的分布式协同过滤算法设计与实现[J].现代图书情报技术,2013,29(1):83.89.[50]冯璐,冷伏海.共词分析方法理论进展[J].中国图书馆学报,2006,32(2):88—92.[51]SarwarB,KarypisG,KonstanJ,eta1.Analysisofrecommendationalgorithmsfore-commerce[C].Proceedingsofthe2ndACMconferenceonElectroniccommerce,2000:158.167.61 致谢致谢岁月如梭,弹指间,研究生两年的时光将要结束,心中自然有千万种不舍。读研究生的时间里,感受到了老师们孜孜不倦的教导和专心致志做学问的态度,同学们刻苦学习和早出晚归的投身于学业中,这些精神将会一直影响我。两年中,遇到了各种困难和挫折,是老师们和同学们的鼓励和帮助,使我能够不断地前进和成长,借此机会,真诚的想他们表示感谢。首先要特别感谢我的指导老师钱晓军,在他两年的指导和栽培下,本论文才能如期的完成。钱老师自身工作认真负责,对我们严格要求,告诫我们要用严谨的态度做事做学问,同时一直以切实经历告诉我们做人的道理,必须学会先做人,然后才是做事做学问。其次,感谢一直陪伴我两年的同学们,有了他们的陪伴,使我的研究生生活更加的丰富多彩。感谢崔华俊同学和卞月峰同学在学术研究上给我的指导,还记得我们一起学习Hadoop,一起研究MapReduce,一起克服难题的情景。最后,要特别感谢我的家人,家人支持与鼓励给了我前进的动力,同时也让我体会到人生的美好。再次感谢帮助我关心我的所有老师、同学和亲友。
还剩69页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 4 人已下载

下载pdf