考虑 MySQLproducts
考虑用于电子商务网站的具有 1000 万种产品
我正在尝试建立一个分类模块来对产品进行分类。我正在使用 Apache Sqoop 将数据从 MySQL 导入 Hadoop。
我想使用 Mahout 作为机器学习框架来使用它的分类算法之一,然后我遇到了MLlib提供的 Spark
- 那么这两个框架有什么区别呢?
- 主要是各自的优势、劣势和局限是什么?
考虑 MySQLproducts
考虑用于电子商务网站的具有 1000 万种产品
我正在尝试建立一个分类模块来对产品进行分类。我正在使用 Apache Sqoop 将数据从 MySQL 导入 Hadoop。
我想使用 Mahout 作为机器学习框架来使用它的分类算法之一,然后我遇到了MLlib提供的 Spark
主要区别将来自底层框架。在 Mahout 的情况下是 Hadoop MapReduce,在 MLib 的情况下是 Spark。更具体地说 - 从每个作业开销的差异
如果您的 ML 算法映射到单个 MR 作业 - 主要区别将只是启动开销,对于 Hadoop MR 是几十秒,对于 Spark 来说是 1 秒。因此,在模型训练的情况下,它并不那么重要。
如果您的算法映射到许多工作,情况会有所不同。在这种情况下,我们将在每次迭代的开销上产生相同的差异,并且它可以改变游戏规则。
假设我们需要 100 次迭代,每次需要 5 秒的集群 CPU。
同时,Hadoop MR 是比 Spark 更成熟的框架,如果您有大量数据,并且稳定性至关重要 - 我会考虑 Mahout 作为重要的替代方案。
警告——主要编辑:
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 等快速计算引擎成为大多数人将在那里投资的标准。