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

时间:2014-05-07 07:30:14

标签: apache-spark mahout apache-spark-mllib

考虑一个MySQL products数据库,其中有一千万种产品用于电子商务网站。

我正在尝试设置分类模块来对产品进行分类。我正在使用Apache Sqoop将数据从MySQL导入Hadoop。

我想将Mahout用作机器学习框架,使用其中一个Classification algorithms,然后我遇到了Spark,它提供了MLlib

  • 那么两个框架之间有什么区别?
  • 主要是,每个的优点,缺点和局限是什么?

2 个答案:

答案 0 :(得分:43)

主要区别将来自底层框架。在Mahout的情况下,它是Hadoop MapReduce,在MLib的情况下,它是Spark。更具体 - 从每个工作开销的差异来看 如果您的ML算法映射到单个MR作业 - 主要差异将只是启动开销,这对于Hadoop MR来说是几十秒,而对于Spark来说就是1秒。因此,在模型培训的情况下,它并不重要 如果您的算法映射到许多作业,情况会有所不同。 在这种情况下,我们将在每次迭代的开销上具有相同的差异,并且它可以是游戏改变者。
让我们假设我们需要100次迭代,每次需要5秒的集群CPU。

  • On Spark:需要100 * 5 + 100 * 1秒= 600秒。
  • 在Hadoop上:MR(Mahout)需要100 * 5 + 100 * 30 = 3500秒。

同时Hadoop MR是比Spark更成熟的框架,如果你有很多数据,而稳定性是最重要的 - 我会认为Mahout是一个严肃的选择。

答案 1 :(得分:42)

警告 - 重大修改:

MLlib是一个在Spark上运行的高级算法的松散集合。这就是Mahout过去只有旧版的Mahout在Hadoop Mapreduce上。在2014年,Mahout宣布它将不再接受Hadoop Mapreduce代码并完全将新开发转换为Spark(其他引擎可能即将推出,如H2O)。

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

如果您需要一个通用引擎,它可以执行很多像R这样的工具,但是对于非常大的数据,请查看Mahout。如果您需要特定的算法,请查看每个算法以查看它们的内容。例如,Kmeans在MLlib中运行,但是如果你需要聚类A'A(推荐器中使用的共生矩阵),你将需要它们,因为MLlib没有矩阵转置或A'A(实际上Mahout做了一个精简优化A'A所以转置优化了。)

Mahout还包含一些创新的recommender building blocks,可以提供其他OSS中找不到的东西。

Mahout仍有其较旧的Hadoop算法,但像Spark这样的快速计算引擎成为大多数人在那里投资的常态。