1

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

  • 10 万用户
  • 10k 项
  • 400万收视率

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

-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);
4

1 回答 1

1

我会建议一种不同的方法。使用每晚作业,为所有用户预先计算建议,并将结果每晚加载到 MySQL 表中。这将使显示建议只不过是一个简单的数据库调用。

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

现在,如果您在 hadoop 和 AWS EMR 上使用 RecommenderJob,处理您规模上的数据将需要大约 10 分钟。或者,您可以通过简单地使用循环并按顺序为所有用户预先计算,以非分布式方式完成相同的工作。缺点是您的建议总是落后 1 天或 6 小时或您选择的任何工作频率。

于 2014-03-02T05:10:08.980 回答