本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  。该系列课程是应邀实验楼整理编写的,这里需要赞一下实验楼提供了学习的新方式,可以边看博客边上机实验,课程地址为 https://www.shiyanlou.com/courses/237

【注】该系列所使用到安装包、测试数据和代码均可在百度网盘下载,具体地址为 http://pan.baidu.com/s/10PnDs,下载该PDF文件

、搭建环境

部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放Hadoop等组件运行包。因为该目录用于安装hadoop等组件程序,用户对shiyanlou必须赋予rwx权限(一般做法是root用户在根目录下创建/app目录,并修改该目录拥有者为shiyanlou(chown –R shiyanlou:shiyanlou /app)。

Hadoop搭建环境:

l  虚拟机操作系统: CentOS6.6  64位,单核,1G内存

l  JDK:1.7.0_55 64位

l  Hadoop:1.1.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 的目标还包括:

l  建立一个用户和贡献者社区,使代码不必依赖于特定贡献者的参与或任何特定公司和大学的资金。

l  专注于实际用例,这与高新技术研究及未经验证的技巧相反。

l  提供高质量文章和示例

、搭建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://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data,也可以在/home/shiyanlou/install-pack/class9目录中找到该测试数据文件,把这个文件放在$MAHOUT_HOME/testdata目录下

cd /home/shiyanlou/install-pack/class9

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

、测试例子:运行20newsgroup

4.1 算法流程

朴素贝叶斯分类是一种十分简单的分类算法,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率哪个最大,就认为此待分类项属于哪个类别。

个不同的集合。这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 观察训练作业运行过程

注:实验楼为命令行界面,无法观测到该步骤界面,以下描述仅做参考

分钟左右:

点击查看具体作业信息

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 观察训练作业运行过程

注:实验楼为命令行界面,无法观测到该步骤界面,以下描述仅做参考

个作业,大概运行了5分钟左右:

作业的基本信息

map运行情况

reduce运行情况

4.2.10 查看结果

类别,这就是我们之前给的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

篇文档被划为了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.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 only

Unknown 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

  .......

Hadoop入门进阶课程9--Mahout介绍、安装与应用案例的更多相关文章

  1. Hadoop入门进阶课程13--Chukwa介绍与安装部署

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  2. Hadoop入门进阶课程12--Flume介绍、安装与应用案例

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  3. Hadoop入门进阶课程11--Sqoop介绍、安装与操作

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  4. Hadoop入门进阶课程10--HBase介绍、安装与应用案例

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  5. Hadoop入门进阶课程8--Hive介绍和安装部署

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  6. Hadoop入门进阶课程7--Pig介绍、安装与应用案例

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  7. Hadoop入门进阶课程1--Hadoop1.X伪分布式安装

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  8. (转)Hadoop入门进阶课程

    http://blog.csdn.net/yirenboy/article/details/46800855 1.Hadoop介绍 1.1Hadoop简介 Apache Hadoop软件库是一个框架, ...

  9. Hadoop入门进阶课程6--MapReduce应用案例

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

随机推荐

  1. PowerDesigner 逆向工程 Mariadb 失败

    作者环境是win8.1 64位置 PowerDesigner 15, Mariadb 10+,在逆向的过程中发生错误,导致只能逆向出表对象,但是表对象中的字段信息确实没有的. 错误信息中的一部分是:  ...

  2. VR视频外包公司(长年承接虚拟全景外包、虚拟现实视频外包)

    承接VR视频外包(虚拟全景外包),虚拟现实视频外包(北京公司) 我们制作各类型VR全景虚拟现实,增强现实视频制作.录制等项目! 品质保证,售后完备. 我们团队成立于2011年10月,是一个专业从事严肃 ...

  3. C语言程序设计基础

    C语言程序设计基础 目录 C语言 C语言基础 C语言编程注意 C语言 C语言基础 C语言编程注意 0<9<9和0<9&&9<9是不同的 数组的声明和定义 con ...

  4. Spring MVC Cookie example

    In this post we will see how to access and modify http cookies of a webpage in Spring MVC framework. ...

  5. 解决 U盘安装Windows Server 2012 R2 报错 Windows 无法打开所需的文件 Sources\install.wim

    报错原因: 使用UltraISO等软件刻录镜像时默认使用FAT32文件系统,该系统不支持大于4G的文件, 而Server 2012 R2的安装文件install.wim为5.12G,固安装失败. 解决 ...

  6. android 首开机会在数据链接图标的状态栏打开并自行消失主动

    请找到该文件ConnectivityService.java (alps\frameworks\base\services\java\com\android\server)  在connectivit ...

  7. Scala中function的理解

    在函数式语言中,函数是和value一样地位的一等公民,他可以作为变量,或者作为参数传递给另一个函数 ##作为变量 val f=(x:Int)=>x+1 为啥可以这样写? 由于scala是OOP, ...

  8. spark-shell 显示乱码

    用spark shell 进入console环境 查看字符集 scala> System.getProperty("file.encoding") res5: String ...

  9. request模块

    一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 # 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模 ...

  10. 20190402Linux进阶命令week1.2

    Linux常用命令详解(week1_day1_2) aliasunaliasunamesuhostnamehistorywhichwcwwhowhoamipingkillseqdudffreedate ...