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

eli*_*sah 53 mahout apache-spark apache-spark-mllib

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

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

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

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

Dav*_*man 44

主要区别将来自底层框架.在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月宣布的那样. (8认同)
  • 很高兴知道.但是与MLib有什么不同呢? (3认同)
  • 我觉得这个答案缺乏主要区别,即它们没有实现相同的算法列表.我一般都发现Mahout的选择范围更广.如果您计划使用特定的机器学习算法,请确保它们在您选择的框架中可用. (2认同)

pfe*_*rel 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这样的快速计算引擎成为大多数人在那里投资的常态.

  • 旧的hadoop mapreduce基于Mahout - 是的.但我不认为尚未命名的Mahout-Spark DSL,它是一个广义的代数求解器和环境就像MLlib.因为它在Spark上运行并且可以在MLlib中使用任何东西,所以它并不寻求重新实现所有这些,而是​​专注于像R这样的一般事物但是在庞大的数据集上. (2认同)