利用Mahout實現在Hadoop上運行K-Means算法
一、介紹Mahout
Mahout是Apache下的開源機器學習軟件包,目前實現的機器學習算法主要包含有協同過濾/推薦引擎,聚類和分類三 個部分。Mahout從設計開始就旨在建立可擴展的機器學習軟件包,用于處理大數據機器學習的問題,當你正在研究的數據量大到不能在一臺機器上運行時,就 可以選擇使用Mahout,讓你的數據在Hadoop集群的進行分析。Mahout某些部分的實現直接創建在Hadoop之上,這就使得其具有進行大數據 處理的能力,也是Mahout最大的優勢所在。相比較于Weka,RapidMiner等 圖形化的機器學習軟件,Mahout只提供機器學習的程序包(library),不提供用戶圖形界面,并且Mahout并不包含所有的機器學習算法實現, 這一點可以算得上是她的一個劣勢,但前面提到過Mahout并不是“又一個機器學習軟件”,而是要成為一個“可擴展的用于處理大數據的機器學習軟件”,但 是我相信會有越來越多的機器學習算法會在Mahout上面實現。[1]
二、介紹K-Means
https://cwiki.apache.org/confluence/display/MAHOUT/K-Means+Clustering#,這是Apache官網上的算法描述,簡單來說就是基于劃分的聚類算法,把n個對象分為k個簇,以使簇內具有較高的相似度。相似度的計算根據一個簇中對象的平均值來進行。[2]
三、在Hadoop上實現運行
1,實驗環境
①hadoop集群環境:1.2.1 一個Master,兩個Slaves,在開始運行kmeans時啟動hadoop
②操作系統:所有機器的系統均為ubuntu12.04
③Mahout版本:采用的是0.5版
2,數據準備
數據采用的是http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data, 這是網上提供的一個比較不錯是數據源。然后用指令 hadoop fs -put /home/hadoop/Desktop/data testdata,將在我桌面的文件data上傳到HDFS的testdata目錄下,這里為什么是testdata,我也正在思考,因為我本來是上傳到 input里,但是運行時提示could not find ….user/testdata之類的,所以現改為了testdata。
3,運行
①配置Mahout環境:在Apache官網下載Mahout的版本,我選擇的是0.5,下載地址:https://cwiki.apache.org/confluence/display/MAHOUT/Downloads。然后解壓到你指定的目錄,將此目錄路徑寫入/etc/profile,添加如下語句:
export MAHOUT_HOME=/home/hadoop/hadoop-1.2.1/mahout-distribution-0.5
export HADOOP_CONF_DIR=/home/hadoop/hadoop-1.2.1/conf
export PATH=$PATH:/home/hadoop/hadoop-1.2.1/bin:$MAHOUT_HOME/bin
然后執行 source /etc/profile。在mahout目錄下執行bin/mahout命令,檢測系統是否安裝成功。如圖:
注:此處修改環境變量有些網上提示是/etc/bash.bashrc,我也試著修改過,但是發現在我這里使環境變量生效的是profile。
②運行Mahout里自帶的K-Means算法,bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job,這里啟動后遇到了一點問題,提示 Could not find math.vector,后來參考這篇http://jerrylead.iteye.com/blog/1188929日志解決。
4,結果
在我的環境下運行5分鐘左右,最后生成一個文件,如圖
四、總結
Mahout是一個很強大的數據挖掘工具,需要進行更深層的了解。