Apache Mahout 和 Apache Spark 的 MLlib 有啥区别?

Posted

技术标签:

【中文标题】Apache Mahout 和 Apache Spark 的 MLlib 有啥区别?【英文标题】:What is the difference between Apache Mahout and Apache Spark's MLlib?Apache Mahout 和 Apache Spark 的 MLlib 有什么区别? 【发布时间】:2014-06-24 01:20:49 【问题描述】:

考虑一个用于电子商务网站的 mysql products 数据库,其中包含 1000 万种产品。

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

我想在它之上使用 Mahout 作为机器学习框架来使用其中一个 Classification algorithms,然后我遇到了由 MLlib 提供的 Spark

那么这两个框架有什么区别呢? 主要是各有什么优势、不足和局限?

【问题讨论】:

【参考方案1】:

主要区别将来自底层框架。在 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 作为重要的替代方案。

【讨论】:

Mahout 的未来版本也将使用 Spark 代替(或补充) MapReduce,正如 2014 年 4 月宣布的那样。 很高兴知道。但是那与 MLib 有什么不同呢? 那么,既然 Mahout 是基于 Spark 的,那么 Mahout 和 Spark 有什么区别呢? Mahout 1.0 提供的作业仍然使用 MapReduce,与使用 Spark 的相同任务相比,它花费大量时间。 我觉得这个答案缺少一个主要区别,那就是它们没有实现相同的算法列表。我通常发现 Mahout 有更广泛的选择。如果您计划使用特定的机器学习算法,请确保它们在您选择的框架中可用。【参考方案2】:

警告——主要修改:

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 等快速计算引擎成为大多数人投资的标准。

【讨论】:

那么,既然 Mahout 是基于 Spark 的,那么 Mahout 和 Spark 有什么区别呢? Spark 会逐渐取代 Mahout 吗? 旧的基于 hadoop mapreduce 的 Mahout——是的。但我不认为尚未命名的 Mahout-Spark DSL 是一种广义代数求解器和环境,它与 MLlib 类似。由于它在 Spark 上运行并且可以使用 MLlib 中的任何内容,因此它不会试图重新实现所有这些,而是​​专注于像 R 一样通用的东西,而是专注于庞大的数据集。 Mahout 彻底改造了自己,并且 - 正如 pferrel 所暗示的那样 - 再次变得相关且有趣。在某些领域,它比 mllib 拥有更坚实的线性代数基础

以上是关于Apache Mahout 和 Apache Spark 的 MLlib 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Mahout 性能问题

Apache Mahout之协同过滤原理与实践

深入了解推荐引擎组件(基于Apache Mahout和Elasticsearch)

Mahout介绍和简单应用

Apache Mahout 中的矢量化

使用 Apache Mahout 对数据进行分类