设为首页 收藏本站
查看: 1383|回复: 0

[经验分享] Hadoop第10周练习—Mahout部署及进行20newsgroup数据分析例子

[复制链接]

尚未签到

发表于 2015-7-11 09:51:04 | 显示全部楼层 |阅读模式
1  运行环境说明... 3
1.1  硬软件环境... 3
1.2  机器网络环境... 3
2  书面作业0:搭建Mahout环境... 3
2.1  Mahout介绍... 3
2.2  部署过程... 4
2.2.1   下载Mahout4
2.2.2   上传Mahout4
2.2.3   解压缩... 4
2.2.4   设置环境变量... 5
2.2.5   验证安装完成... 6
2.3  测试例子... 6
2.3.1   下载测试数据,放到$MAHOUT_HOME/testdata目录... 6
2.3.2   启动Hadoop. 7
2.3.3   使用kmeans算法... 7
2.3.4   查看结果... 7
3  书面作业1:运行20newsgroup. 8
3.1  书面作业1内容... 8
3.2  算法流程... 8
3.3  实现过程(mahout 0.6版本)... 9
3.3.1   下载数据... 9
3.3.2   上传并解压数据... 10
3.3.3   建立训练集... 11
3.3.4   建立测试集... 11
3.3.5   上传数据到HDFS. 11
3.3.6   训练贝叶斯分类器... 12
3.3.7   观察训练作业运行过程... 13
3.3.8   查看生成模型... 14
3.3.9   测试贝叶斯分类器... 14
3.3.10观察训练作业运行过程... 15
3.3.11查看结果... 16
3.4     实现过程(mahout 0.7+版本)... 17
4 问题解决... 18
4.1  使用mahout0.7+版本对20Newsgroup数据建立训练集时出错... 18
1 运行环境说明
1.1 硬软件环境
l  主机操作系统:Windows 64 bit,双核4线程,主频2.2G,6G内存
l  虚拟软件:VMware® Workstation 9.0.0 build-812388
l  虚拟机操作系统:CentOS 64位,单核,1G内存
l  JDK:1.7.0_55 64 bit
l  Hadoop:1.1.2
1.2 机器网络环境
集群包含三个节点:1个namenode、2个datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:
序号

IP地址

机器名

类型

用户名

运行进程

1

10.88.147.221

hadoop1

名称节点

hadoop

NN、SNN、JobTracer

2

10.88.147.222

hadoop2

数据节点

hadoop

DN、TaskTracer

3

10.88.147.223

hadoop3

数据节点

hadoop

DN、TaskTracer

所有节点均是CentOS6.5 64bit系统,防火墙均禁用,所有节点上均创建了一个hadoop用户,用户主目录是/usr/hadoop。所有节点上均创建了一个目录/usr/local/hadoop,并且拥有者是hadoop用户。
2 书面作业0:搭建Mahout环境
2.1 Mahout介绍
Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。AMahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
2.2 部署过程
2.2.1下载Mahout
在Apache下载最新的Mahout软件包,点击下载会推荐最快的镜像站点,以下为下载地址:http://archive.apache.org/dist/mahout/0.6/
DSC0000.jpg

2.2.2上传Mahout
把下载的mahout-distribution-0.6.tar.gz安装包,使用SSH Secure File Transfer工具(第1、2作业周2.1.3.1介绍)上传到/home/hadoop/Downloads 目录下
DSC0001.jpg

2.2.3解压缩
在Downloads目中将mahout解压缩
cd /home/hadoop/Downloads/

tar -xzf mahout-distribution-0.6.tar.gz

DSC0002.jpg

把mahout-distribution-0.6目录移到/usr/local目录下
sudo mv mahout-distribution-0.6 /usr/local/mahout-0.6

cd /usr/local

ls

DSC0003.jpg

2.2.4设置环境变量
使用如下命令编辑/etc/profile文件:
sudo vi /etc/profile

DSC0004.jpg

声明mahout的home路径和在path加入bin的路径:
export MAHOUT_HOME=/usr/local/mahout-0.6

export MAHOUT_CONF_DIR=/usr/local/mahout-0.6/conf

export PATH=$PATH:$MAHOUT_HOME/bin

DSC0005.jpg
编译配置文件/etc/profile,并确认生效
source /etc/profile

2.2.5验证安装完成
重新登录终端,确保hadoop集群启动,键入mahout --help命令,检查Mahout是否安装完好,看是否列出了一些算法:
mahout --help

DSC0006.jpg

2.3 测试例子
2.3.1下载测试数据,放到$MAHOUT_HOME/testdata目录
下载一个文件synthetic_control.data,下载地址http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data,并把这个文件放在$MAHOUT_HOME目录下 DSC0007.jpg

cd /home/hadoop/Downloads/

mv synthetic_control.data /usr/local/mahout-0.6/

DSC0008.jpg

mkdir testdata

cp synthetic_control.data testdata/

ls

DSC0009.jpg

2.3.2启动Hadoop
./start-all.sh

DSC00010.jpg

2.3.3使用kmeans算法
使用如下命令进行kmeans算法测试:

mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

DSC00011.jpg

2.3.4查看结果
结果会在根目录建立output新文件夹,如果下图结果表示mahout安装正确且运行正常:

cd output

ls

DSC00012.jpg

3 书面作业1:运行20newsgroup
3.1 书面作业1内容
安装Mahout,并运行20newsgroup的测试样例,抓图说明实验过程
3.2 算法流程
朴素贝叶斯分类是一种十分简单的分类算法,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率哪个最大,就认为此待分类项属于哪个类别。
这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不同的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中作为实验,根据机器学习技术。例如文本分类,文本聚集。我们将使用Mahout的Bayes Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示
   DSC00013.jpg
  
3.3     实现过程(mahout 0.6版本)
3.3.1下载数据
下载20Newsgroups数据集,地址为 http://qwone.com/~jason/20Newsgroups/ ,下载20news-bydate.tar.gz数据包
DSC00014.jpg

3.3.2上传并解压数据
把下载的20news-bydate.tar.gz数据包,使用SSH Secure File Transfer工具(第1、2作业周2.1.3.1介绍)上传到/home/hadoop/Downloads 目录下:
DSC00015.jpg

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

tar -xzf 20news-bydate.tar.gz

DSC00016.jpg

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

mv 20news-bydate-t* /usr/local/mahout-0.6/data

ls /usr/local/mahout-0.6/data

DSC00017.jpg

3.3.3建立训练集
通过如下命令建立训练集,训练的数据在20news-bydate-train目录中,输出的训练集目录为 bayes-train-input:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \

-p /usr/local/mahout-0.6/data/20news-bydate-train \

-o /usr/local/mahout-0.6/data/bayes-train-input \

-a org.apache.mahout.vectorizer.DefaultAnalyzer \

-c UTF-8

DSC00018.jpg
3.3.4建立测试集
通过如下命令建立训练集,训练的数据在20news-bydate-test目录中,输出的训练集目录为 bayes-test-input:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \

-p /usr/local/mahout-0.6/data/20news-bydate-test \

-o /usr/local/mahout-0.6/data/bayes-test-input \

-a org.apache.mahout.vectorizer.DefaultAnalyzer \

-c UTF-8

DSC00019.jpg

3.3.5上传数据到HDFS
在HDFS中新建./20news文件夹,把生成的训练集和测试集上传到HDFS的./20news目录中:
hadoop fs -mkdir ./20news

hadoop fs -put /usr/local/mahout-0.6/data/bayes-train-input ./20news

hadoop fs -put /usr/local/mahout-0.6/data/bayes-test-input ./20news

hadoop fs -ls ./20news

hadoop fs -ls ./ 20news/bayes-test-input

DSC00020.jpg
3.3.6训练贝叶斯分类器
使用trainclassifier类训练在HDFS中./20news/bayes-train-input的数据,生成的模型放到./ 20news/newsmodel 目录中:
mahout trainclassifier \

-i /user/hadoop/20news/bayes-train-input \

-o /user/hadoop/20news/newsmodel \

-type cbayes

-ng2 \

-source hdfs

DSC00021.jpg

3.3.7观察训练作业运行过程
在训练过程中在JobTracker页面观察运行情况,链接地址为http://hadoop1:50030/jobtracker.jsp,训练任务四个作业,大概运行了15分钟左右:
DSC00022.jpg

点击查看具体作业信息
DSC00023.jpg
map运行情况
DSC00024.jpg
作业运行情况
DSC00025.jpg
3.3.8查看生成模型
通过如下命令查看模型内容:
hadoop fs -ls ./20news

hadoop fs -ls ./20news/newsmodel

hadoop fs -ls ./20news/newsmodel/trainer-tfIdf

DSC00026.jpg
3.3.9测试贝叶斯分类器
使用testclassifier类训练在HDFS中./20news/bayestest-input的数据,使用的模型路径为./ 20news/newsmodel:
mahout testclassifier \

-m /user/hadoop/20news/newsmodel \

-d /user/hadoop/20news/bayes-test-input \

-type cbayes

-ng2 \

-source hdfs\

-method mapreduce


DSC00027.jpg

3.3.10   观察训练作业运行过程
在执行过程中在JobTracker页面观察运行情况,链接地址为http://hadoop1:50030/jobtracker.jsp,训练任务1个作业,大概运行了5分钟左右:
DSC00028.jpg

作业的基本信息

DSC00029.jpg

map运行情况

DSC00030.jpg

reduce运行情况

DSC00031.jpg

3.3.11   查看结果
这个混合矩阵的意思说明:上述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 ,可见其正确率还是很高的了。
DSC00032.jpg

3.4 实现过程(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 四个选项中选择第一个选项,
DSC00033.jpg

DSC00034.jpg
4 问题解决
4.1  使用mahout0.7+版本对20Newsgroup数据建立训练集时出错
使用如下命令对20Newsgroupt数据建立训练集时:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \

-p /usr/local/mahout-0.9/data/20news-bydate-train \

-o /usr/local/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

  .......

调用shell脚本执行参见3.4

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85420-1-1.html 上篇帖子: 高可用Hadoop平台-应用JAR部署 下篇帖子: hadoop文件系统体系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表