56

考虑 MySQLproducts考虑用于电子商务网站的具有 1000 万种产品

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

我想使用 Mahout 作为机器学习框架来使用它的分类算法之一,然后我遇到了MLlib提供的 Spark

  • 那么这两个框架有什么区别呢?
  • 主要是各自的优势、劣势和局限是什么?
4

2 回答 2

46

主要区别将来自底层框架。在 Mahout 的情况下是 Hadoop MapReduce,在 MLib 的情况下是 Spark。更具体地说 - 从每个作业开销的差异
如果您的 ML 算法映射到单个 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 作为重要的替代方案。

于 2014-05-07T10:45:22.607 回答
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 还包括一些创新的推荐构建块,这些构建块提供了其他 OSS 所没有的东西。

Mahout 仍然拥有其较旧的 Hadoop 算法,但随着 Spark 等快速计算引擎成为大多数人将在那里投资的标准。

于 2014-05-08T06:08:10.733 回答