二、基于Mapreduce算法开发过程分析
将ItemCF算法转化为一系列首尾相接的Mapreduce处理。同一个Job的Mapper的输出是同一个Job的Reducer的输入;前一个Job的Reducer的输出是后一个Job的Mapper的输入:
1)Mapper1: (k1, v1) list(k2, v2); Reducer1: (k2, list(v2)) list(k3, v3);
2)Mapper2: (k3, v3) list(k4, v4); Reducer2: (k4, list(v4)) list(k5, v5);
基于Mapreduce的ItemCF算法实现过程如下:
1. Mapreduce计算过程的输入数据
假设有5个用户的浏览情况如下图(图2)所示,需要对输入数据进行预处理。首先要计算每个用户浏览的宝贝个数,还需要求出每个宝贝被多少用户浏览过。(冗余字段的设计,可以针对不同的用户来源采用不同的计算公式,以便在Map阶段进行加权计算,本文中不作介绍)。Mapreduce计算的数据输入结构如下:
……………………
最后,根据用户的浏览行为和被浏览物品之间的相似度分数,为用户推荐可能的最感兴趣的物品。
三、ItemCF算法的Mapreduce单元测试和本地集成测试
本节所介绍的ItemCF算法测试方法所用测试数据将沿用上一节的分析案例。通过单元测试和本地集成测试验证基于Mapreduce开发的ItemCF算法正确性。
针对hadoop的Mapreduce算法开发代码,通过集群运行结果来定位问题比较低效。当数据量大时,无法准确定位问题,调试代码比较耗时。因此,对Mapreduce的单元测试和Mapreduce的本地集成测试是非常有必要的。
MRUnit是一款由Couldera公司开发的专门针对Hadoop中编写MapReduce单元测试的框架。可以用MapDriver单独测试Map,用ReduceDriver单独测试Reduce,用MapReduceDriver测试MapReduce作业。
根据ItemCF算法的Mapreduce计算过程,进行单元测试。从上一节案例的算法分析过程来看,要进行MR的单元测试,分别需要对Map阶段和Reduce阶段进行测试,以及进行mapreduce的集成测试。
......
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。