четвер, 6 лютого 2014 р.

Встановлення Apache Mahout.

Отже, сьогодні розглянемо деякі технічні деталі, які допожуть встановити Apache Mahout на Ubuntu 12.04:

1. Встановлюємо Hadoop:
 cd ~/Downloads  
 wget http://mirror.rmg.io/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz  
 sudo cp hadoop-2.2.0.tar.gz /usr/local  
 cd /usr/local  
 sudo tar -zxvf hadoop-2.2.0.tar.gz   
 export HADOOP_HOME=/usr/local/hadoop-2.2.0  
 export PATH=$PATH:$HADOOP_HOME/bin 
 Set up variables pemanently:
 sudo gedit  /etc/environment
 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
 export HADOOP_HOME=/usr/local/hadoop-2.2.0
 add to PATH line ":HADOOP_HOME/bin" 

2. Тестуємо:
 $HADOOP_HOME/bin/hadoop  
Якщо все встановлено правильно, ви побачите щось на зразок:
 Usage: hadoop [--config confdir] COMMAND  
     where COMMAND is one of:  
  fs          run a generic filesystem user client  
  version       print the version  
  jar <jar>      run a jar file  
  checknative [-a|-h] check native hadoop and compression libraries availability  
  distcp <srcurl> <desturl> copy file or directories recursively  
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive  
  classpath      prints the class path needed to get the  
             Hadoop jar and the required libraries  
  daemonlog      get/set the log level for each daemon  
  or  
  CLASSNAME      run the class named CLASSNAME  

3. Встановлюємо Maven та перевіряємо чи все встановилось коректно:
 sudo apt-get install maven  
 mvn -version  

4. І, нарешті, сам Mahout:
 cd ~/Downloads  
 wget http://apache-mirror.telesys.org.ua/mahout/0.8/mahout-distribution-0.8-src.tar.gz  
 sudo tar -zxvf mahout-distribution-0.8-src.tar.gz  
 sudo cp -r ~/Downloads/mahout-distribution-0.8 /usr/local  
 sudo mv mahout-distribution-0.8 mahout  
 cd mahout/core  
 sudo mvn -DskipTests install  
 cd mahout/examples
 sudo mvn install

5. Cтворємо новий Maven "Hello world" проект:
 cd /usr/local/mahout  
 sudo mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.unresyst -DartifactId=mahoutrec  
 cd mahoutrec  
 sudo mvn compile  
 sudo mvn exec:java -Dexec.mainClass="com.unresyst.App" [print Hello world]  
Додаємо Mahout залежності до pom.xml:
 <dependency>  
    <groupId>org.apache.mahout</groupId>  
    <artifactId>mahout-core</artifactId>  
    <version>0.8</version>  
   </dependency>  
   <dependency>  
    <groupId>org.apache.mahout</groupId>  
    <artifactId>mahout-math</artifactId>  
    <version>0.8</version>  
   </dependency>  
   <dependency>  
    <groupId>org.apache.mahout</groupId>  
    <artifactId>mahout-math</artifactId>  
    <version>0.8</version>  
    <type>test-jar</type>  
    <scope>test</scope>  
   </dependency>  
   <dependency>  
    <groupId>org.apache.mahout</groupId>  
    <artifactId>mahout-utils</artifactId>  
    <version>0.8</version>  
   </dependency>  
Компілюємо maven проект:
 mvn compile  

6. Пишемо найпростішу рекомендаційну систему:
Створюємо папку datasets  у папці проекту, яка міститиме файл dummy-bool.csv з наступним вмістом:
 #userId,itemId  
 1,3  
 1,4  
 2,44  
 2,46  
 3,3  
 3,5  
 3,6  
 4,3  
 4,5  
 4,11  
 4,44  
 5,1  
 5,2  
 5,4  
В даному випадку, це інформація про продукти, обрані користувачем (куплені, переглянуті, скачані). Наприклад, користувач з ID =5 обрав продукти 1, 2 та 4.
Тепер, безпосередньо, сам рекомендаційний скрипт. Створюємо  файл UnresystBoolRecommend.java та поміщаємо його у src/main/java/com/unresyst/ нашого проекту. Код:
 package com.unresyst;  
 import java.io.File;  
 import java.io.FileNotFoundException;  
 import java.util.List;  
 import java.io.IOException;  
 import org.apache.commons.cli2.OptionException;   
 import org.apache.mahout.cf.taste.common.TasteException;  
 import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;  
 import org.apache.mahout.cf.taste.impl.recommender.CachingRecommender;  
 import org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender;  
 import org.apache.mahout.cf.taste.model.DataModel;  
 import org.apache.mahout.cf.taste.recommender.RecommendedItem;  
 import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;  
 public class UnresystBoolRecommend {  
   public static void main(String... args) throws FileNotFoundException, TasteException, IOException, OptionException {  
     // create data source (model) - from the csv file        
     File ratingsFile = new File("datasets/dummy-bool.csv");              
     DataModel model = new FileDataModel(ratingsFile);  
     // create a simple recommender on our data  
     CachingRecommender cachingRecommender = new CachingRecommender(new SlopeOneRecommender(model));  
     // for all users  
     for (LongPrimitiveIterator it = model.getUserIDs(); it.hasNext();){  
       long userId = it.nextLong();  
       // get the recommendations for the user  
       List<RecommendedItem> recommendations = cachingRecommender.recommend(userId, 10);  
       // if empty write something  
       if (recommendations.size() == 0){  
         System.out.print("User ");  
         System.out.print(userId);  
         System.out.println(": no recommendations");  
       }  
       // print the list of recommendations for each   
       for (RecommendedItem recommendedItem : recommendations) {  
         System.out.print("User ");  
         System.out.print(userId);  
         System.out.print(": ");  
         System.out.println(recommendedItem);  
       }  
     }      
   }  
 }  
Компілюємо проект:
 mvn compile  
Запускаємо рекомендаційний  скрипт:
 mvn exec:java -Dexec.mainClass="com.unresyst.UnresystBoolRecommend"   
Отримуємо рекомендації для кожного користувача:
 User 1: RecommendedItem[item:5, value:1.0]  
 User 2: RecommendedItem[item:5, value:1.0]  
 User 2: RecommendedItem[item:3, value:1.0]  
 User 3: no recommendations  
 User 4: no recommendations  
 User 5: RecommendedItem[item:5, value:1.0]  
 User 5: RecommendedItem[item:3, value:1.0]  

Якщо вам не вдасться відворити якийсь з вищенаведених кроків, відповідь можна знати серед цих ресурсів:
http://drunks-and-lampposts.com/2013/06/09/mahout-for-r-users/
http://codesfusion.blogspot.com/2013/10/setup-hadoop-2x-220-on-ubuntu.html?m=1
http://acadmedia.wku.edu/Pavan/Mahout_in_Action.pdf
https://code.google.com/p/unresyst/wiki/CreateMahoutRecommender







1 коментар:

  1. Наразі Mahout 0.8 працює лише з hadoop першої версії (Hadoop 1.2.1). Процес встановлення hadoop 1.2.1 аналогічний до описаного в пості. Також спільнота працює над імплементацією підтримки hadoop другої версії.

    ВідповістиВидалити