Hadoop第10周練習—Mahout部署及進行20newsgroup數據分析例子

1  運行環境說明... 3node

1.1  硬軟件環境... 3算法

1.2  機器網絡環境... 3shell

2  書面做業0:搭建Mahout環境... 3apache

2.1  Mahout介紹... 3網絡

2.2  部署過程... 4機器學習

2.2.1   下載Mahout4jsp

2.2.2   上傳Mahout4ide

2.2.3   解壓縮... 4工具

2.2.4   設置環境變量... 5oop

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

相關文章
相關標籤/搜索