Как я мог бы использовать mahout с hadoop в Eclipse?

#hadoop #mahout #mahout-recommender

#hadoop #mahout #mahout-рекомендатель

Вопрос:

Я хочу использовать eclipse для разработки своего проекта с mahout-0.9 и hadoop-2.2.0.

Я мог бы успешно запустить свой код с mahout-0.9. Но я столкнулся с проблемой, как я мог запустить свой проект с помощью hadoop mod? Я думаю, что мне нужно установить hadoop на свой компьютер и использовать command для его запуска. Тогда я мог бы запустить свой проект в eclipse с модом hadoop.

Поскольку Mahout может использоваться MAHOUT_LOCAL для определения локального мода или мода hadoop в Linux. Но когда я устанавливаю для переменной среды MAHOUT_LOCAL значение «», она также использует локальный мод, почему?

Если невозможно запустить mahout с hadoop в eclipse, как я могу запустить свой проект? Спасибо 🙂

Мой пример кода

 package com.predictionmarketing.itemrecommend;

import java.io.File;
import java.io.IOException;
import java.util.List;

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.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.UncenteredCosineSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;

public class ItemRecommend {

    public static void main(String[] args) {
        try {
             DataModel model = new FileDataModel(new File("data/test.txt")); 
             ItemSimilarity similarity = new UncenteredCosineSimilarity(model); 
             Recommender recommender = new GenericItemBasedRecommender(model, similarity);

             List<RecommendedItem> recommendations = recommender.recommend(2, 10);
             for(RecommendedItem recommendation : recommendations) {
                 System.out.println(recommendation.getItemID()   ","   recommendation.getValue());
             }
        } catch (IOException e) {
            System.out.println("There was an error.");
            e.printStackTrace();
        } catch (TasteException e) {
            System.out.println("There was a Taste Exception");
            e.printStackTrace();
        }
    }
}
  

введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. ваш код здесь не включает никакого вызова класса Hadoop. для примера: «новый файл («data/test.txt «)» читается из локального файла, а не из HDFS

2. Как я мог читать из HDFS?? Спасибо

3. Ответ здесь может быть немного длинным, поэтому я советую вам взглянуть на это .

Ответ №1:

Ваш пример не является кодом Hadoop. Рекомендации Mahout представлены в версиях, отличных от hadoop «в памяти», как вы использовали в своем примере, и версиях Hadoop. Версия Hadoop имеет совершенно другой API, поскольку она вычисляет все рекомендации для всех пользователей и помещает их в файлы HDFS. Вы можете запустить версию Hadoop из командной строки на компьютере, который является клиентом Hadoop (знает, как взаимодействовать с кластером Hadoop). Доступ осуществляется путем ввода mahout recommenditembased , и он распечатает экран справки.

После того, как вы запустите задание hadoop в кластере, вам нужно будет написать код для поиска ссылок для конкретного пользователя из этих файлов.

Это часто делается путем написания кода для хранения рекомендаций в базе данных и использования запросов для извлечения рекомендаций во время выполнения.

Комментарии:

1. Спасибо за ваше предложение! Это очень полезно! Не могли бы вы рассказать, как получить файлы, сохраненные в hdfs? Я думаю, что это может быть текстовый файл, хранящийся на моем компьютере, если я хочу получить результат, как я могу это сделать? Спасибо!

2. Они будут в файлах последовательности HDFS. «Ключом» для каждой строки будет идентификатор пользователя mahout (целое число), значение будет RecommendedItems, насколько я помню, поэтому значение представляет собой список рекомендуемых элементов с весами. Запустите mahout seqdumper -i one-of-the-part-files | more , чтобы получить представление о данных и о том, что такое classname ключа и значения.