1. 程式人生 > >Mahout 搭建開發環境 + 實現專案示例

Mahout 搭建開發環境 + 實現專案示例

背景介紹

  筆者我此時是一個完全沒用過Mahout的門外漢,對Hadoop也沒有實際使用經驗,算是真正的零基礎。我的目標是希望以最簡單的方式搭建起一個Mahout的開發環境,以最快的速度讓Mahout工作起來,以方便後續的進一步學習
  於是,經過一番折騰,便有了本文。本文記錄了 Linux 下Eclipse+Maven+Mahout單機環境的搭建過程。我不知道這是不是最簡單的Mahout開發環境,但它應該算得上是比較簡單的。

這裡寫圖片描述

  如上圖所示,我們可以選擇在win中開發,也可以在linux中開發,開發過程我們可以在本地環境進行除錯,標配的工具都是Maven和Eclipse。Maven又是什麼?這裡只需要知道它是一個專案管理工具就行,有了它,可以非常方面的安裝Mahout和相關依賴元件。

開發環境介紹

1. Centos6.5系統 自帶版本為 3.6.1的 Eclipse,已經安裝的外掛如下圖

這裡寫圖片描述

線上安裝 Maven 外掛(不幸陣亡)

按照網上的教程就是

1. Help -> Install New Software…

這裡寫圖片描述

這裡寫圖片描述

其中 4 位置的 Available Software Sites 是在出現以下情況時(Duplicate location)再進行操作的

這裡寫圖片描述

然後按照以下的數字順序進行操作,刪除原有的 Duplicate 然後

這裡寫圖片描述

選中 m2e 的位置,然後選中 “Disable”,最後再 “Remove”,這樣就可以將歷史搜尋的地址刪除

3. 選中所需 m2e 外掛進行安裝

這裡寫圖片描述

因為選中了 “Show only the lastest versions of available software”,所以顯示的是最新版本的外掛(圖中顯示的1.6.1),如果將其去掉勾選,那麼將出現以往版本,如下圖

這裡寫圖片描述

筆者我先使用最新的外掛來進行安裝

4. 出現 error

這裡寫圖片描述

錯誤分析直接線上安裝maven2 會出現依賴外掛找不到的問題,無法安裝

網上解決方案: 必須先安裝gef 外掛後才能安裝m2eclipse-core 外掛,然而安裝m2eclipse-extras 外掛又依賴subclipse 外掛。所以,三個外掛的正確的安裝順序是 gef外掛 -> subclipse外掛 -> m2eclipse外掛

  • m2eclipse-core外掛 ——依賴——>gef外掛
  • m2eclipse-extras外掛 ——依賴——>subclipse外掛

(反正筆者我怎麼試都失敗,於是無奈放棄該方案,但不敢說該方法沒用)

成功的步驟

根據網上調查的資料,比較可靠的解釋是 maven 外掛的版本與 eclipse 的版本有衝突,簡單的說就是要安裝的maven版本相對eclipse版本來說太新了。如果maven是最新的,則提高eclipe版本號;如果maven低, 則降低eclipse版本號

1. 下載最新的 eclipse
在 eclipse 首介面上,選擇 Help -> About Eclipse Platform -> http://www.eclipse.org/platform -> Download -> 下載合適的 eclipse 版本
筆者我選擇的是 eclipse-SDK-I20150818-0800-linux-gtk-x86_64.tar.gz ,下載地址:http://pan.baidu.com/s/1kTxndB5,密碼:n5hb

解壓縮到使用者目錄下,筆者我放在 /home/hadoop/software 目錄下

tar -zxvf eclipse-SDK-I20150818-0800-linux-gtk-x86_64.tar.gz 

2. 修改環境
如果原始的 eclipse 版本不刪除,但又想在終端直接輸入 eclipse 呼叫最新版本的,而不是自帶的 eclipse ,那麼修改環境變數是最好的選擇。

vim ~/.bash_profile

新增如下語句

export PATH=/home/hadoop/software/eclipse:${PATH}

然後

source ~/.bash_profile

在終端 輸入 eclipse,出現如下,即可與說明環境生效

這裡寫圖片描述

3. 刪除軟體自帶外掛

Help -> Install New Software… -> Available Software Sites
將 Neon 等這3個取消勾選,然後 ok 繼續(主要為了省時間)

這裡寫圖片描述

4. 安裝 Eclipse Luna 外掛

然後按圖中數字進行設定

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

檢驗:Help-> About Eclipse SDK

這裡寫圖片描述

檢驗:Help-> Installation Details

這裡寫圖片描述

Note:這裡必須用 “m2e” 進行過濾,不然全部安裝的話,很可能會出現下面的不幸情況

That does not work for me, after installing all libraries from Luna, my Eclipse cannot be started. Loading Eclipse every time fails, I have to uninstall eclipse and reinstall everything again.

使用Maven構建Mahout專案

1. 執行Eclipse,通過選單File > New > Project新建專案,選擇Maven Project,然後直接Next

這裡寫圖片描述

2. 選擇maven-archetype-quickstart

這裡寫圖片描述

3. 輸入GroupId和ArtifactId,可以根據自己喜好隨便命名

這裡寫圖片描述

4. 點了Finish後,Eclipse便會建立如下一個工程

這裡寫圖片描述

Note:

預設使用自帶的 J2SE-1.5,需要修改為最新的 jdk

  • Project -> Properties -> Java Build Path -> Libraries

這裡寫圖片描述

  • 選擇 “Add Library” -> “JRE System Library”

這裡寫圖片描述

5. 雙擊pom.xml,在右邊的面板中選擇Dependencies,點選Add,在彈出的對話方塊中輸入mahout,Maven便會搜尋相關包,選擇mahout-core,確定

這裡寫圖片描述

6. 在 eclipse 中搜索相應的 jar 包
“Window” —> “Show View” —> “Maven Repositories” —> “Local Repositories”
choose “Local Repository” click right and “Rebuild Index”

這裡寫圖片描述

上面是在你的本地 maven 倉庫已經下載了相應的東東之後,不然可以採用備選方案
“Window” —> “Show View” —> “Maven Repositories” —> “Global Repositories”
chose “nexus-osc” click right and “Update Index”

接下來直接在下列框中輸入 mahout 即可!其他的資訊會自動生成,而不用人工生成

這裡寫圖片描述

7. 在出現的各種 jar 包,選擇其中兩個 mahout-core 和 mahout-math

這裡寫圖片描述

選完之後,按 Ctrl+S 進行儲存,在左邊的 “Package Explorer” 一欄中 Maven Dependencies 會出現很多包,那就說明基本安裝成功了。

Note: 如果出現警告

Index downloads are disabled, search results may be incomplete

解決方案:
“Window” –> “Preferences” and choose Maven in the left side.

Now you have to check the box “Download repository index updates on startup”

測試

1. 資料準備:data.csv,存放在 “/home/hadoop/data.csv” 下

第一列為UserID ,第二列為ItemID,第三列為Preference Value 即評分
1,101,5
1,102,3
1,103,2.5
2,101,2
2,102,2.5
2,103,5
2,104,2
3,101,2.5
3,104,4
3,105,4.5
3,107,5
4,101,5
4,103,3
4,104,4.5
4,106,4
5,101,4
5,102,3
5,103,2
5,104,4
5,105,3.5
5,106,4

2. 在剛才建立的工程下,選中 App.java

這裡寫圖片描述
將其中的程式碼改寫為

package wang.bigdata.www.mahout.wzf;

import org.apache.mahout.cf.taste.impl.model.file.*;  
import org.apache.mahout.cf.taste.impl.neighborhood.*;  
import org.apache.mahout.cf.taste.impl.recommender.*;  
import org.apache.mahout.cf.taste.impl.similarity.*;  
import org.apache.mahout.cf.taste.model.*;  
import org.apache.mahout.cf.taste.neighborhood.*;  
import org.apache.mahout.cf.taste.recommender.*;  
import org.apache.mahout.cf.taste.similarity.*;  
import java.io.*;  
import java.util.*;  
public class App {  
    private App(){};  

    public static void main (String args[])throws Exception{  
                // step:1  2  3 k 4   
        DataModel  model =new FileDataModel(new File("/home/hadoop/data.csv"));//  
        UserSimilarity similarity =new PearsonCorrelationSimilarity(model);  
        UserNeighborhood neighborhood =new NearestNUserNeighborhood(2,similarity,model);  
        Recommender recommender= new GenericUserBasedRecommender(model,neighborhood,similarity);  
        List<RecommendedItem> recommendations =recommender.recommend(1, 2);//1ItemID  
        for(RecommendedItem recommendation :recommendations){  
            System.out.println(recommendation);  
        }  

    }  
}  

最後得到輸出結果如下:

這裡寫圖片描述

可以看到,Mahout為使用者1提供了兩個推薦商品,分別是104和106

補充:前面的執行結果顯示三行紅字,說是slf4j裡面的StaticLoggerBinder載入失敗,雖說它不影響程式執行結果,但看著實在煩人,解決辦法是再次編輯pom.xml的dependencies,新增一個slf4j-jcl包即可

這裡寫圖片描述

參考資料