Mahout推荐性能问题

时间:2013-07-17 13:41:21

标签: performance mahout mahout-recommender

我一直在与Mahout合作,根据以下数据创建推荐引擎:

  • 100k用户
  • 10k项目
  • 4M评级

我在Tomcat上使用以下JVM参数运行它:

-Xms1024M -Xmx1024M -da -dsa -XX:NewRatio=9 -server

建议花了大约6s,似乎很慢!我怎样才能改善Mahout表演?

我正在使用以下代码:

此部分在启动时运行一次:

JDBCDataModel jdbcdatamodel = new MySQLJDBCDataModel(dataSource);
dataModel = new ReloadFromJDBCDataModel(jdbcdatamodel);

ItemSimilarity similarity = new CachingItemSimilarity(new EuclideanDistanceSimilarity(model), model);
SamplingCandidateItemsStrategy strategy = new SamplingCandidateItemsStrategy(10, 5);
recommender = new CachingRecommender(new GenericItemBasedRecommender(model, similarity, strategy, strategy));

并且,对于我做的每个用户请求:

recommender.recommend(userId, howMany);

1 个答案:

答案 0 :(得分:1)

我建议采用不同的方法。使用夜间作业,预先计算所有用户的推荐,并将结果每晚加载到MySQL表中。这将使得推荐仅仅是一个简单的数据库调用。

由于您有10K项目,因此计算单个用户mahout的建议必须在内部乘以(10k x 10K)矩阵与另一个(10K X 1)矩阵。考虑到尺寸,6秒似乎相当快。 Reference

现在,如果您在hadoop和AWS EMR上使用RecommenderJob,则需要〜<10分钟来处理您的规模上的数据。或者,您可以通过简单地使用循环并按顺序为所有用户预先计算,以非分布式方式执行相同的工作。不利的一面是,您的建议总是落后1天或6小时或您选择工作的频率。