加快Spark MLLib

时间:2016-08-23 15:05:37

标签: scala apache-spark apache-spark-mllib collaborative-filtering

我正在使用MLlib的矩阵分解来向用户推荐项目。我有一个很大的隐式交互矩阵,M = 2000万用户和N = 50k项目。在训练模型之后,我想获得针对每个用户的推荐的简短列表(例如,200)。我在recommendProductsForUsers中尝试了MatrixFactorizationModel,但它非常慢(跑了9个小时,但距离完成还很远。我正在测试50个执行器,每个执行器有8g内存)。这可能是预期的,因为recommendProductsForUsers需要计算所有M*N用户项互动,并为每个用户获得最高分。

我会尝试使用更多的执行程序,但是从我在Spark UI上的应用程序详细信息中看到的,我怀疑它可以在几小时或一天内完成,即使我有1000个执行程序(在9小时之后它仍然在{{1}这里https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.scala#L279-L289,总共10000个任务,只完成了200个) 除了增加执行者数量之外,还有其他任何我可以调整的东西来加快推荐过程吗?

以下是示例代码:

flatmap

1 个答案:

答案 0 :(得分:1)

@Jack Lei:你找到了答案吗? 我自己尝试了很少的东西,但只是帮了一点。

例如:我试过

javaSparkContext.setCheckpointDir("checkpoint/");

这有助于避免重复计算。

还尝试为每个Executor和开销spark内存添加更多内存

--conf spark.driver.maxResultSize=5g --conf spark.yarn.executor.memoryOverhead=4000
相关问题