Apache Mahout和Apache Spark的MLlib有什么区别?

57
考虑一个拥有1000万个产品的电商网站MySQL products数据库。
我正在尝试设置一个分类模块来对产品进行分类。我使用Apache Sqoop将数据从MySQL导入到Hadoop。
我想使用Mahout作为机器学习框架之一,使用其Classification algorithms之一,然后遇到了配备MLlib的Spark。
那么这两个框架有什么区别呢?
主要是它们各自的优点、缺点和限制是什么?
2个回答

47
主要差别来自底层框架。在Mahout的情况下,使用的是Hadoop MapReduce,在MLib的情况下,使用的是Spark。更具体地说,差异在于每个任务的开销。
如果您的机器学习算法映射到单个MR作业中,则主要区别仅在于启动开销,对于Hadoop MR来说,这是数十秒,而对于Spark来说,是1秒左右。因此,在模型训练方面,它并不那么重要。
如果你的算法映射到多个作业中,情况会有所不同。 在这种情况下,每次迭代的开销相同,并且可能是改变局面的因素。
假设我们需要100次迭代,每次迭代需要5秒钟的集群CPU。
  • 在Spark上:需要100*5+100*1秒=600秒。
  • 在Hadoop上:MR(Mahout)需要100*5+100*30=3500秒。
同时,Hadoop MR比Spark更成熟的框架,如果您有大量数据,并且稳定性至关重要,我建议考虑Mahout作为一个值得认真考虑的替代方案。

8
Mahout未来的版本将使用Spark替代MapReduce或与其同时使用,这是在2014年4月宣布的。 - herman
3
了解了,但是与MLib相比会有什么不同呢? - David Gruzman
那么,既然Mahout基于Spark,Mahout和Spark之间有什么区别? - skan
Mahout 1.0提供的工作仍在使用MapReduce,与使用Spark执行相同任务相比需要花费巨大的时间。 - shihpeng
我猜Mlib相对于Mahout还处于早期阶段。Mahout算法很多,它们支持Spark和Mapreduce。 - Rakshith
2
我觉得这个答案缺少一个主要的区别,那就是它们没有实现相同的算法列表。我一般发现 Mahout 有更广泛的选择。如果你计划使用具体的机器学习算法,请确保它们在你选择的框架中可用。 - Nadine

42

警告-重大修改:

MLlib是一个高级算法集合,可在Spark上运行。这就是Mahout以前的东西,只不过Mahout是基于Hadoop Mapreduce的。2014年,Mahout宣布将不再接受Hadoop Mapreduce代码,并完全将新开发转向Spark(还可能有其他引擎,如H2O)。

最重要的成果是基于Scala的通用分布式优化线性代数引擎和环境,包括交互式Scala shell。"generalized"也许是最重要的词汇。由于它在Spark上运行,Mahout-Spark的线性代数引擎可以使用MLlib中可用的任何东西。

如果您需要一个通用引擎来处理大量数据类似于R工具所做的事情,看看Mahout。如果您需要特定的算法,请查看每个算法以了解它们拥有什么。例如,Kmeans在MLlib中运行,但如果您需要聚类A'A(推荐系统中使用的共现矩阵),则需要两者都使用,因为MLlib没有矩阵转置或A'A(实际上Mahout进行了优化的A'A使得转置优化掉了)。

Mahout还包含一些创新型的推荐器构建模块,提供其他开源软件中没有的功能。

Mahout仍然包括其较旧的Hadoop算法,但随着快速计算引擎(如Spark)成为主流,大多数人将在这些领域投资。


1
那么,现在Mahout基于Spark,Mahout和Spark有什么区别? Spark会逐渐取代Mahout吗? - skan
2
旧版的基于Hadoop MapReduce的Mahout确实存在。但是我认为目前还没有命名的Mahout-Spark DSL与MLlib不同,它是一个通用的代数求解器和环境,可以在Spark上运行并使用MLlib中的任何内容,因此它不需要重新实现所有内容,而是专注于像R一样处理大数据集的通用性。 - pferrel
Mahout已经重新发明自己,并且 - 正如pferrel所暗示的那样 - 变得更加相关和有趣。在某些领域,它比mllib具有更坚实的线性代数基础。 - WestCoastProjects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接