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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM