Apache Mahout与Spark MLlib均是Apache下的项目,都是机器学习算法库,并且现在mahout已经不再接受MapReduce的作业了,也向Spark转移。

那两者有什么关系呢?我们在应用过程中该作何取舍?既然已经有了Mahout,为什么还会再有MLlib的盛行呢?虽然在后续资料搜集解决疑惑的过程中,Mahout和MLlib并非“瑜”和“亮”的关系,但是小编在最初还是忍不住冒出“既生瑜,何生亮”的感慨来......

除了关于机器学习库方面的疑问,同样在运行机制上也存在疑惑:MLib和mahout都运行在hadoop上,底层都是基于HDFS文件系统;但Mlib运行在spark上,主要基于内存计算,大家都知道基于内存计算肯定是比数据库I/O快的,那么会不会在能处理的数据量级别上不如mahout?会不会对硬件有更高需求?能否实现增加节点线性增加计算能力?

Apache Mahout && Spark MLlib

Mahout是hadoop的一个机器学习库,主要的编程模型是MapReduce;Spark ML则是基于Spark的机器学习,Spark自身拥有MLlib作为机器学习库。现在Mahout已经停止接受新的MapReduce算法了,向Spark迁移。

按照Mahout代码贡献者的提法,Weathering Thru Tech Days: Mahout 0.10.x: first Mahout release as a programming environment。Mahout已经不再开发和维护新的基于MR的算法,会转向支持Scala,同时支持多种分布式引擎,包括Spark和H20。另外,Mahout和Spark ML并不是竞争关系,Mahout是MLlib的补充。

传统的Mahout是提供的是Java的API,用户应用会编译成MapReduce的job,运行在MapReduce的框架上。从现在看来,这种方式开发效率低,运行速度慢,已经过时了。而,Spark特别适合迭代式的计算,这正是机器学习算法训练所需要的。那么是不是可以说Mahout肯定会被Spark取代呢?非也。Mahout社区也在憋大招。

Apache Mahout 机器学习库

Mahout只是一个java的软件库,并不提供用户接口预装服务器或者安装程序。

现在Mahout项目在理论上可以实现大部分类型的机器学习技术,但是实际上现在它仅仅关注推荐引擎(协同过滤)、聚类和分类。其次Mahout是可扩展的,它旨在当所处理的数据规模远大于单机处理能力时成为一种可选的机器学习工具。在现在Mahout中,这些可扩展的机器学习实现都是用java来写的,而且有些事建立在Apache的Hadoop分布式计算项目之上的。

(以下内容两点说明来自知乎回答:如何看待mahout和milib之间的关系,mahout真的死了么?)

着眼于计算平台

在Mahout的开发者看来,Mllib各种算法像一个黑盒子,只有少量参数可以调整,也许用起来很简单,但是很多时候并不能满足不同用户的需要。未来的Mahout的目标是机器学习平台,它将提供类似R和Scala的DSL,支持类似分布式向量计算,大数据统计等基本功能,让用户可以很方便的将算法转化为代码。

支持多种后端

另外,未来的Mahout将支持多种后端,spark是一种,也许还有Flink。

具体可以参考这几篇文章

1. Weathering Thru Tech Days: Mahout 0.10.x: first Mahout release as a programming environment

2. What are the differences between Apache Mahout and Spark MLlib?

下面是未来Mahout的架构图。

Spark MLlib 机器学习库

Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因:

(1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止,迭代时如果使用Hadoop的MapReduce计算框架,每次计算都要读/写磁盘以及任务的启动等工作,这回导致非常大的I/O和CPU消耗。而Spark基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说Spark正是机器学习的理想的平台。

(2)从通信的角度讲,如果使用Hadoop的MapReduce计算框架,JobTracker和TaskTracker之间由于是通过heartbeat的方式来进行的通信和传递数据,会导致非常慢的执行速度,而Spark具有出色而高效的Akka和Netty通信系统,通信效率极高。

MLlib(Machine Learnig lib) 是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark的设计初衷就是为了支持一些迭代的Job, 这正好符合很多机器学习算法的特点。在Spark官方首页中展示了Logistic Regression算法在Spark和Hadoop中运行的性能比较,如图下图所示。

可以看出在Logistic Regression的运算场景下,Spark比Hadoop快了100倍以上!

MLlib目前支持4种常见的机器学习问题: 分类、回归、聚类和协同过滤,MLlib在Spark整个生态系统中的位置如图下图所示。


MLlib基于RDD,天生就可以与Spark SQL、GraphX、Spark Streaming无缝集成,以RDD为基石,4个子框架可联手构建大数据计算中心!

MLlib是MLBase一部分,其中MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime。

l  ML Optimizer会选择它认为最适合的已经在内部实现好了的机器学习算法和相关参数,来处理用户输入的数据,并返回模型或别的帮助分析的结果;

l  MLI 是一个进行特征抽取和高级ML编程抽象的算法实现的API或平台;

l  MLlib是Spark实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充; MLRuntime 基于Spark计算框架,将Spark的分布式计算应用到机器学习领域。


Spark MLlib架构解析

从架构图可以看出MLlib主要包含三个部分:

l  底层基础:包括Spark的运行库、矩阵库和向量库;

l  算法库:包含广义线性模型、推荐系统、聚类、决策树和评估的算法;

l  实用程序:包括测试数据的生成、外部数据的读入等功能。

从机器学习库的角度,结合官网介绍和各位知乎大牛的分析,大致总结如下:

Mahout机器学习
每个企业的数据都是多样的和特别针对他们需求的。然而, 在对那些数据的分析种类上却没多少多样性。Mahout项目是实施普通分析计算的一个Hadoop库。用例包括用户协同过滤、用户建议、聚类和分类。

MLlib:机器学习
MLlib 运行在spark上(一个基于内存计算的框架),
MLib和mahout都运行在hadoop上,底层都是基于HDFS文件系统;但Mlib运行在spark上,主要基于内存计算

关于机器学习库依旧存在很多不明白的点,那碰到就尽量去弄明白吧!

参考资料

1.Spark官网 mlllib说明

http://spark.apache.org/docs/1.1.0/mllib-guide.html

2.《机器学习常见算法分类汇总》

http://www.ctocio.com/hotnews/15919.html

声明:以上内容如有侵犯到您的原创,请联系我们进行处理,谢谢!


那年乱世如麻,愿你们来世拥有锦绣年华。


更多干货内容请关注微信公众号“AI 深入浅出

长按二维码关注

既生Mahout,何生Spark MLlib ?相关推荐

  1. Spark MLlib协同过滤之交替最小二乘法ALS实践

    摘自Spark MLlib协同过滤之交替最小二乘法ALS原理与实践 为什么要使用最小二乘法?(稀疏) 在实际应用中,由于用户只会评价或交易少部分物品,评分矩阵一般都非常稀疏.这种情况下的挑战是用相对少 ...

  2. Spark Mllib里的Mllib基本数据类型(图文详解)

    不多说,直接上干货! Spark Mllib基本数据类型,根据不同的作用和应用场景,分为四种不同的类型 1.Local  vector : 本地向量集,主要向spark提供一组可进行操作的数据集合 2 ...

  3. Spark MLlib实现的中文文本分类–Naive Bayes

    2019独角兽企业重金招聘Python工程师标准>>> 中文分词 对于中文文本分类而言,需要先对文章进行分词,我使用的是IKAnalyzer中文分析工具,其中自己可以配置扩展词库来使 ...

  4. spark mllib 预测之LinearRegression(线性回归)

    为什么80%的码农都做不了架构师?>>>    商品价格与消费者输入之间的关系 商品需求(y, 吨),价格(x1, 元),消费者收入(x2, 元) y x1 x2 5 1 1 8 1 ...

  5. 协同过滤算法 R/mapreduce/spark mllib多语言实现

    用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化 ...

  6. Spark MLlib介绍

    Spark MLlib介绍 Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因: (1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足 ...

  7. Spark MLlib 机器学习

    本章导读 机器学习(machine learning, ML)是一门涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多领域的交叉学科.ML专注于研究计算机模拟或实现人类的学习行为,以获取新知识.新 ...

  8. 基于Spark MLlib平台的协同过滤算法---电影推荐系统

    协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,协同过滤算法按照数据使用 ...

  9. spark mllib 朴素贝叶斯 naive bayes

    为什么80%的码农都做不了架构师?>>>    数据源说明 第一列每行的标签,其他列为特征 运行代码如下 package spark.logisticRegressionimport ...

最新文章

  1. 360度无死角、近距离看「CNN」训练,是种什么体验?网友:美得不真实
  2. 推荐干货 | 我在阿里做运营:八一八运营经典误区
  3. ThreadLocal 是什么?有哪些使用场景?——Spring系列学习笔记
  4. 1.IT-解决方案-1-FTP
  5. 统计学习/机器学习常用小知识
  6. php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦
  7. 10大iOS开发者最喜爱的类库
  8. 摩托罗拉G7系列发布:G7 Plus还有中国红配色
  9. python基础分析_python基础--函数全解析(1)
  10. python 把当前目录文件夹中的所有图片缩放为640*480
  11. 1047: 对数表 C语言
  12. 工作流的大致开发流程
  13. 面试被问“红黑树”,我一脸懵逼......
  14. GCD深入学习之GCD的初识
  15. idea中更换java版本
  16. ffprobe 获取视频每秒总帧数或视频总帧数及视频总时长
  17. 阿里云飞天技术总架构师唐洪:飞天技术与应用
  18. Java 从键盘输入数据到一维double数组中
  19. 用户场景分析的四要素是什么?
  20. BFS广搜例题,问题引入 --- 阿狗荒岛逃生系列(其一)

热门文章

  1. android电池电量更新,android 电池(三):android电池系统
  2. C++指针与const的结合用法
  3. Uncaught TypeError: Cannot read properties of undefined (reading ‘push’) ---- vue-router报错
  4. 鸿蒙如何连接电视,鸿蒙系统的电视怎么安装第三方软件,荣耀智慧屏X1装软件教程...
  5. 任鸟飞游戏安全之WXW怀旧安全
  6. 作业11 最优前缀编码
  7. Eclipse搭建scala环境(解决“JDT weaving is currently disabled”)
  8. 手动创建oracle database
  9. Html5的废弃与新增全局属性及元素
  10. win10 移动硬盘无法弹出 提示设备已被占用