Mahout介绍、安装与应用案例
搭建环境
部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放
Hadoop等组件运行包。因为该目录用于安装hadoop等组件程序,用户对shiyanlou必须赋予rwx权限(一般做法是root用户在根目录下
创建/app目录,并修改该目录拥有者为shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建环境:
- 虚拟机操作系统: CentOS6.6 64位,单核,1G内存
 - JDK:1.7.0_55 64位
 - Hadoop:1.1.2
 
2 Mahout介绍
Mahout 是 Apache Software Foundation(ASF)
旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。AMahout包含许多实现,包括
聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
Mahout的意思是大象的饲养者及驱赶者。Mahout 这个名称来源于该项目(有时)使用 Apache Hadoop —其徽标上有一头黄色的大象 —来实现可伸缩性和容错性。
Mahout 项目是由 Apache
Lucene(开源搜索)社区中对机器学习感兴趣的一些成员发起的,他们希望建立一个可靠、文档翔实、可伸缩的项目,在其中实现一些常见的用于集群和分类
的机器学习算法。该社区最初基于 Ng et al. 的文章 “Map-Reduce for Machine Learning on
Multicore”(见 参考资料),但此后在发展中又并入了更多广泛的机器学习方法。Mahout 的目标还包括:
- 建立一个用户和贡献者社区,使代码不必依赖于特定贡献者的参与或任何特定公司和大学的资金。
 - 专注于实际用例,这与高新技术研究及未经验证的技巧相反。
 - 提供高质量文章和示例
 
3 搭建Mahout环境
3.1 部署过程
3.1.1 下载Mahout
在Apache下载最新的Mahout软件包,点击下载会推荐最快的镜像站点,以下为下载地址:http://archive.apache.org/dist/mahout/0.6/
也可以在/home/shiyanlou/install-pack目录中找到该安装包,解压该安装包并把该安装包复制到/app目录中
- cd /home/shiyanlou/install-pack
 - tar -xzf mahout-distribution-0.6.tar.gz
 - mv mahout-distribution-0.6 /app/mahout-0.6
 

3.1.2 设置环境变量
使用如下命令编辑/etc/profile文件:
- sudo vi /etc/profile
 
声明mahout的home路径和在path加入bin的路径:
- export MAHOUT_HOME=/app/mahout-0.6
 - export MAHOUT_CONF_DIR=/app/mahout-0.6/conf
 - export PATH=$PATH:$MAHOUT_HOME/bin
 

编译配置文件/etc/profile,并确认生效
- source /etc/profile
 - echo $PATH
 
3.1.3 验证安装完成
重新登录终端,确保hadoop集群启动,键入mahout --help命令,检查Mahout是否安装完好,看是否列出了一些算法:
- mahout --help
 

3.2 测试例子
3.2.1 下载测试数据
下载一个文件synthetic_control.data,下载地址:
http://labfile.oss.aliyuncs.com/courses/237/synthetic_control.data
把这个文件放在$MAHOUT_HOME/testdata目录下
- cd /home/shiyanlou/install-pack/class9
 - wget
 - mkdir /app/mahout-0.6/testdata
 - mv synthetic_control.data /app/mahout-0.6/testdata
 

3.2.2 启动Hadoop
通过下面命令启动hadoop并通过jps查看进程
- cd /app/hadoop-1.1.2/bin
 - ./start-all.sh
 - jps
 

3.2.3 使用kmeans算法
使用如下命令进行kmeans算法测试:
- cd /app/mahout-0.6/
 - mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
 

这里需要说明下,当你看到下面的代码时以为是错的,其实不是,原因:MAHOUT_LOCAL:设置是否本地运行,如果设置该参数就不会在hadoop运行了,一旦设置这个参数那HADOOP_CONF_DIR 和HADOOP_HOME两个参数就自动失效了。
MAHOUT_LOCAL is not set, so we don't add HADOOP_CONF_DIR to classpath.
no HADOOP_HOME set , running locally
3.2.4 查看结果
结果会在根目录建立output新文件夹,如果下图结果表示mahout安装正确且运行正常:
- cd /app/mahout-0.6/output
 - ll
 

4 测试例子:运行20newsgroup
4.1 算法流程
朴素贝叶斯分类是一种十分简单的分类算法,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率哪个最大,就认为此待分类项属于哪个类别。
这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不同的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中
作为实验,根据机器学习技术。例如文本分类,文本聚集。我们将使用Mahout的Bayes
Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示

4.2 实现过程(mahout 0.6版本)
4.2.1 下载数据并解压数据
下载20Newsgroups数据集,地址为 http://qwone.com/~jason/20Newsgroups/ ,下载20news-bydate.tar.gz数据包,也可以在/home/shiyanlou/install-pack/class9目录中找到该测试数据文件:

解压20news-bydate.tar.gz数据包,解压后可以看到两个文件夹,分别为训练原始数据和测试原始数据:
- cd /home/shiyanlou/install-pack/class9
 - tar -xzf 20news-bydate.tar.gz
 

在mahout根目录下建data文件夹,然后把20news训练原始数据和测试原始数据迁移到该文件夹下:
- mkdir /app/mahout-0.6/data
 - mv 20news-bydate-t* /app/mahout-0.6/data
 - ll /app/mahout-0.6/data
 

4.2.2 建立训练集
通过如下命令建立训练集,训练的数据在20news-bydate-train目录中,输出的训练集目录为 bayes-train-input:
- cd /app/mahout-0.6
 - mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
 - -p /app/mahout-0.6/data/20news-bydate-train \
 - -o /app/mahout-0.6/data/bayes-train-input \
 - -a org.apache.mahout.vectorizer.DefaultAnalyzer \
 - -c UTF-8
 

4.2.3 建立测试集
通过如下命令建立训练集,训练的数据在20news-bydate-test目录中,输出的训练集目录为 bayes-test-input:
- mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
 - -p /app/mahout-0.6/data/20news-bydate-test \
 - -o /app/mahout-0.6/data/bayes-test-input \
 - -a org.apache.mahout.vectorizer.DefaultAnalyzer \
 - -c UTF-8
 

4.2.4 上传数据到HDFS
在HDFS中新建/class9/20news文件夹,把生成的训练集和测试集上传到HDFS的/class9/20news目录中:
- hadoop fs -mkdir /class9/20news
 - hadoop fs -put /app/mahout-0.6/data/bayes-train-input /class9/20news
 - hadoop fs -put /app/mahout-0.6/data/bayes-test-input /class9/20news
 - hadoop fs -ls /class9/20news
 - hadoop fs -ls /class9/20news/bayes-test-input
 

4.2.5 训练贝叶斯分类器
使用trainclassifier类训练在HDFS中/class9/20news/bayes-train-input的数据,生成的模型放到/class9/ 20news/newsmodel 目录中:
- mahout trainclassifier \
 - -i /class9/20news/bayes-train-input \
 - -o /class9/20news/newsmodel \
 - -type cbayes \
 - -ng 2 \
 - -source hdfs
 

4.2.6 观察训练作业运行过程
注:实验楼为命令行界面,无法观测到该步骤界面,以下描述仅做参考
在训练过程中在JobTracker页面观察运行情况,链接地址为http://**.***.**.***:50030/jobtracker.jsp,训练任务四个作业,大概运行了15分钟左右:
点击查看具体作业信息

map运行情况

作业运行情况

4.2.7 查看生成模型
通过如下命令查看模型内容:
- hadoop fs -ls /class9/20news
 - hadoop fs -ls /class9/20news/newsmodel
 - hadoop fs -ls /class9/20news/newsmodel/trainer-tfIdf
 

4.2.8 测试贝叶斯分类器
使用testclassifier类训练在HDFS中./20news/bayestest-input的数据,使用的模型路径为./ 20news/newsmodel:
- mahout testclassifier \
 - -m /class9/20news/newsmodel \
 - -d /class9/20news/bayes-test-input \
 - -type cbayes \
 - -ng 2 \
 - -source hdfs \
 - -method mapreduce
 

4.2.9 观察训练作业运行过程
注:实验楼为命令行界面,无法观测到该步骤界面,以下描述仅做参考
在执行过程中在JobTracker页面观察运行情况,链接地址为http://hadoop:50030/jobtracker.jsp,训练任务1个作业,大概运行了5分钟左右:
作业的基本信息

map运行情况

reduce运行情况

4.2.10 查看结果
这个混合矩阵的意思说明:上述a到u分别是代表了有20类别,这就是我们之前给的20个输入文件,列中的数据说明每个类别中被分配到的字节个数,classified说明应该被分配到的总数
381  0  0  0  0  9  1  0  0  0  1  0  0  2  0  1  0  0  3  0  0  |  398  a = rec.motorcycles
意思为rec.motorcycles 本来是属于 a,有381篇文档被划为了a类,这个是正确的数据,其它的分别表示划到 b~u类中的数目。我们可以看到其正确率为 381/398=0.9573 ,可见其正确率还是很高的了。

4.3 实现过程(mahout 0.7+版本)
在0.7版本的安装目录下$MAHOUT_HOME/examples/bin下有个脚本文件classifu-20newsgroups.sh,
这个脚本中执行过程是和前面分布执行结果是一致的,只不过将各个API用shell脚本封装到一起了。从0.7版本开始,Mahout移除了命令行调用的
API:prepare20newsgroups、trainclassifier和testclassifier,只能通过shell脚本执行。
执行 $MAHOUT_HOME/examples/bin/classify-20newsgroups.sh 四个选项中选择第一个选项,

执行结果如下:

5 问题解决
5.1 使用mahout0.7+版本对20Newsgroup数据建立训练集时出错
使用如下命令对20Newsgroupt数据建立训练集时:
- mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
 - -p /app/mahout-0.9/data/20news-bydate-train \
 - -o /app/mahout-0.9/data/bayes-train-input \
 - -a org.apache.mahout.vectorizer.DefaultAnalyzer\
 - -c UTF-8
 
出现如下错误,原因在于从0.7版本开始,Mahout移除了命令行调用的prepare20newsgroups、
trainclassifier和testclassifier
API,只能通过shell脚本执行$MAHOUT_HOME/examples/bin/classify-20newsgroups.sh进行
14/12/7 21:31:35 WARN driver.MahoutDriver: Unable to add class: org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups
14/12/7 21:31:35 WARN driver.MahoutDriver: No org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups.props found on classpath, will use command-line arguments onlyUnknown program 'org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups' chosen.
Valid program names are:
  arff.vector: : Generate Vectors from an ARFF file or directory
  baumwelch: : Baum-Welch algorithm for unsupervised HMM training
  .......
												
											Mahout介绍、安装与应用案例的更多相关文章
- Azkaban介绍+安装部署+实战案例
		
Azkaban介绍 什么是azkaban?1.工作流的作业调度系统2.通过k.v指令写法描述工作流节点3.可以通过web界面去管理工作流 Azkaban安装部署 2.3.1 准备工作 Azkaban ...
 - Apache Flume的介绍安装及简单案例
		
概述 Flume 是 一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的软件.Flume 的核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目的地(sink).为了保证 ...
 - Hadoop入门进阶课程9--Mahout介绍、安装与应用案例
		
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
 - _00019 Storm架构介绍和Storm获取案例(简单的官方网站Java案例)
		
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
 - _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
		
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
 - Mahout 的安装
		
Mahout 的安装 Mahout是Hadoop的一种高级应用.运行Mahout需要提前安装好Hadoop,Mahout只在Hadoop集群的NameNode节点上安装一个即可,其他数据节点上不需要安 ...
 - webpack 介绍 & 安装 & 常用命令
		
webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...
 - [Redis_1] Redis 介绍 && 安装
		
0. 说明 Redis 介绍 && 安装 1. Redis 介绍 2. Redis 安装(Windows 10) [2.1 解压 redis-2.2.2-win32-win64.rar ...
 - Rancher介绍安装以及对docker的管理
		
原文:Rancher介绍安装以及对docker的管理 一.简介 Rancher是一个开源的企业级全栈化容器部署及管理平台.Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务.存储服务.主 ...
 
随机推荐
- 从Dictionary源码看哈希表
			
一.基本概念 哈希:哈希是一种查找算法,在关键字和元素的存储地址之间建立一个确定的对应关系,每个关键字对应唯一的存储地址,这些存储地址构成了有限.连续的存储地址. 哈希函数:在关键字和元素的存储地址之 ...
 - 对平底锅和垃圾的O奖论文的整理和学习[1](2018-02-08发布于知乎)
			
今天和杉杉同志在Pacific Coffee坐了0.4天,目前两人都处于放空状态. 这种天气有暖气真的太棒了. 我今天看的论文是这两篇: MCM2013B题O奖论文MCM2016B题O奖论文 先说第一 ...
 - 部分APP无法代理抓包的原因及解决方法
			
引言 HTTP应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了不可见,整个人都好像被蒙住了眼睛. ...
 - 性能测试学习第五天-----Jmeter测试脚本&基础元件使用
			
JMeter简介:一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具.具有高可扩展性.支持Web(HTTP/HTTPS).SOAP.FTP.JAVA等多种协 ...
 - 终于,我感受到了IDEA的强大
			
Java开发者千千万,开发者用的开发工具目前主流却只有2种:eclipse和IDEA,我入行以来一直用的eclipse,听过IDEA很好很强大,但是也只是处于听说的阶段,基本没用过,自然没怎么体会过. ...
 - python学习笔记(6)--面向对象学习
			
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引言 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做(人狗大战)的游戏,你就思 ...
 - offsetX、clientX、screenX、pageX、layerX
			
pageX/Y 原点相对于文档窗口左上角. offsetX/Y 原点相对于触发事件元素的左上角,需要注意的是,offset是有负值的,如果你的元素有边框,那么offset会是负值. (黑色为鼠标点击点 ...
 - 开发APP必须知道的API集合,来源http://www.cnblogs.com/wikiki/p/7232388.html
			
笔记 OneNote - OneNote支持获取,复制,创建,更新,导入与导出笔记,支持为笔记添加多媒体内容,管理权限等.提供SDK和Demo. 为知笔记 - 为知笔记Windows客户端开放了大量的 ...
 - HBase的安装和使用
			
文章作者:foochane 原文链接:https://foochane.cn/article/2019062801.html 1 Hbase基本介绍 Hbase是一个分布式数据库,可以提供数据的实时 ...
 - nanopi NEO2 学习笔记 2:安装 pip 和 pip 安装第三方模块
			
我现在越来越喜欢用python做开发了,特别是知道了python还能用rpi.gpio库操作 NEO2 的 io 口之后,更是激动 在进行一下的操作之前,要先更换国内的 apt arm64 源,并更新 ...