zoukankan      html  css  js  c++  java
  • Hadoop第10周练习—Mahout部署及进行20newsgroup数据分析例子

    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.2G6G内存

    l  虚拟软件:VMware® Workstation 9.0.0 build-812388

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

    l  JDK1.7.0_55 64 bit

    l  Hadoop1.1.2

    1.2 机器网络环境

    集群包含三个节点:1namenode2datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:

    序号

    IP地址

    机器名

    类型

    用户名

    运行进程

    1

    10.88.147.221

    hadoop1

    名称节点

    hadoop

    NNSNNJobTracer

    2

    10.88.147.222

    hadoop2

    数据节点

    hadoop

    DNTaskTracer

    3

    10.88.147.223

    hadoop3

    数据节点

    hadoop

    DNTaskTracer

    所有节点均是CentOS6.5 64bit系统,防火墙均禁用,所有节点上均创建了一个hadoop用户,用户主目录是/usr/hadoop。所有节点上均创建了一个目录/usr/local/hadoop,并且拥有者是hadoop用户。

    2 书面作业0:搭建Mahout环境

    2.1 Mahout介绍

    Mahout Apache Software FoundationASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。AMahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。

    2.2 部署过程

    2.2.1下载Mahout

    Apache下载最新的Mahout软件包,点击下载会推荐最快的镜像站点,以下为下载地址:http://archive.apache.org/dist/mahout/0.6/

    clip_image002

    2.2.2上传Mahout

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

    clip_image004

    2.2.3解压缩

    Downloads目中将mahout解压缩

    cd /home/hadoop/Downloads/

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

    clip_image006

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

    sudo mv mahout-distribution-0.6 /usr/local/mahout-0.6

    cd /usr/local

    ls

    clip_image008

    2.2.4设置环境变量

    使用如下命令编辑/etc/profile文件:

    sudo vi /etc/profile

    clip_image010

    声明mahouthome路径和在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

    clip_image012

    编译配置文件/etc/profile,并确认生效

    source /etc/profile

    2.2.5验证安装完成

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

    mahout --help

    clip_image014

    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目录下clip_image016

    cd /home/hadoop/Downloads/

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

    clip_image018

    mkdir testdata

    cp synthetic_control.data testdata/

    ls

    clip_image020

    2.3.2启动Hadoop

    ./start-all.sh

    clip_image022

    2.3.3使用kmeans算法

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

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

    clip_image024

    2.3.4查看结果

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

    cd output

    ls

    clip_image026

    3 书面作业1:运行20newsgroup

    3.1 书面作业1内容

    安装Mahout,并运行20newsgroup的测试样例,抓图说明实验过程

    3.2 算法流程

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

    这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不同的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中作为实验,根据机器学习技术。例如文本分类,文本聚集。我们将使用MahoutBayes Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示

    clip_image028

     

    3.3     实现过程(mahout 0.6版本)

    3.3.1下载数据

    下载20Newsgroups数据集,地址为 http://qwone.com/~jason/20Newsgroups/ ,下载20news-bydate.tar.gz数据包

    clip_image030

    3.3.2上传并解压数据

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

    clip_image032

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

    cd /home/hadoop/Downloads/

    tar -xzf 20news-bydate.tar.gz

    clip_image034

    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

    clip_image036

    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

    clip_image038

    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

    clip_image040

    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

    clip_image042

    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

    clip_image044

     

    3.3.7观察训练作业运行过程

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

    clip_image046

    点击查看具体作业信息

    clip_image048

    map运行情况

    clip_image050

    作业运行情况

    clip_image052

    3.3.8查看生成模型

    通过如下命令查看模型内容:

    hadoop fs -ls ./20news

    hadoop fs -ls ./20news/newsmodel

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

    clip_image054

    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

     

    clip_image056

    3.3.10   观察训练作业运行过程

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

    clip_image058

    作业的基本信息

    clip_image060

    map运行情况

    clip_image062

    reduce运行情况

    clip_image064

    3.3.11   查看结果

    这个混合矩阵的意思说明:上述au分别是代表了有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 ,可见其正确率还是很高的了。

    clip_image066

    3.4 实现过程(mahout 0.7+版本)

    0.7版本的安装目录下$MAHOUT_HOME/examples/bin下有个脚本文件classifu-20newsgroups.sh,这个脚本中执行过程是和前面分布执行结果是一致的,只不过将各个APIshell脚本封装到一起了。从0.7版本开始,Mahout移除了命令行调用的APIprepare20newsgroupstrainclassifiertestclassifier,只能通过shell脚本执行。

    执行 $MAHOUT_HOME/examples/bin/classify-20newsgroups.sh 四个选项中选择第一个选项,

    clip_image068

     

    clip_image070

    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移除了命令行调用的prepare20newsgroupstrainclassifiertestclassifier 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

  • 相关阅读:
    Android源码4.4.4_r1下载和编译
    [转]【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术
    Android C语言_init函数和constructor属性及.init/.init_array节探索
    阅读android源码了解 android 加载so的流程
    div嵌套内层div的margin-top转移给外层div的解决办法
    实现在一个页面内,点击导航栏的不同链接,跳转到不同的页面
    当导航栏滚动到浏览器顶部时,固定导航栏
    如何在ios手机端的Safari浏览器 中“查看网页源代码”
    带有可点击区域的图像映射:HTML <map> 标签
    网页中如何使用一些特殊字体
  • 原文地址:https://www.cnblogs.com/shishanyuan/p/4205209.html
Copyright © 2011-2022 走看看