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

考虑一个具有1000万个产品的MySQL products数据库用于电子商务网站。

我试图build立一个分类模块来分类产品。 我正在使用Apache Sqoop将数据从MySQL导入到Hadoop。

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

  • 那么这两个框架有什么区别呢?
  • 主要有哪些优点,各自的缺点和局限性?

主要区别将来自底层框架。 在Mahout的情况下是Hadoop MapReduce,在MLib的情况下是Spark。 更具体地说 – 从每个工作开销的差异
如果您的MLalgorithm映射到单个MR作业 – 主要区别将仅仅是启动开销,对于Hadoop MR来说是几十秒,对于Spark来说是1秒。 所以在模型训练的情况下,这并不重要。
如果你的algorithm被映射到许多工作,情况将会不同。 在这种情况下,我们每次迭代的开销都会有相同的差异,并且可以是游戏更改器。
假设我们需要100次迭代,每次需要5秒钟的集群CPU。

  • 在星火:它将需要100 * 5 + 100 * 1秒= 600秒。
  • 在Hadoop上:MR(Mahout)需要100 * 5 + 100 * 30 = 3500秒。

在同一时间Hadoop先生是更成熟的框架,然后星火,如果你有很多的数据,稳定性是至高无上的 – 我会认为Mahout是一个严重的select。

警告 – 主要编辑:

MLlib是一个在Spark上运行的高级algorithm的松散集合。 这就是Mahout以前只有Hadoop Mapreduce的Mahout。 2014年,Mahout宣布将不再接受Hadoop Mapreduce代码,并将新开发工作完全转向Spark(其他引擎,如H2O)。

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

如果你需要一个通用的引擎来做很多像R这样的工具,但是真正的大数据,那就看看Mahout吧。 如果你需要一个特定的algorithm,看看每个,看看他们有什么。 例如,Kmeans运行在MLlib中,但是如果您需要对A'A(推荐器中使用的一个共生matrix)进行聚类,您将需要它们,因为MLlib没有matrix转置或A'A(实际上,Mahout进行了精简优化A'A所以转置优化出来)。

Mahout还包括一些创新的推荐构build模块 ,提供没有其他OSS中发现的东西。

Mahout仍然拥有较早的Hadoopalgorithm,但像Spark这样的快速计算引擎已成为大多数人在这里投资的标准。