2013-06-09 2 views
0

Привет, я пытался запустить пример из Маху в действии Глава 7 (k-Mean Clustering). Может кто-нибудь наставит меня, как запустить этот пример в Hadoop кластера (один узел CDH-4.2.1) с Mahout (0,7)Как запустить Kmean Clustering от Mahout в действии?

Эти шаги я затем:

  1. скопировал код (от Github) в мою Eclipse IDE, на моей локальной машине.

  2. Включил эти банки в проект Eclipse.

Hadoop-синфазного 2.0.0-cdh4.2.1.jar

Hadoop-HDFS-2.0.0-cdh4.2.1.jar

Hadoop-MapReduce-клиент-ядро-2,0 0,0-cdh4.2.1.jar

махает-ядро-0,7-cdh4.3.0.jar

махает-ядро-0,7-cdh4.3.0-job.jar

махает-мы го-0,7-cdh4.3.0.jar

  1. Сделано Jar этого проекта и скопировать эту банку на мой Hadoop кластера

  2. Выполнив эту команду

пользователь @ INFPH01463U : ~ $ hadoop jar /home/user/apurv/Kmean.jar tryout.SimpleKMeansClustering

, который дал мне следующие ошибки

Exception in thread "main" java.lang.NoClassDefFoundError: FileSystem 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) 
     at java.lang.Class.getMethod0(Class.java:2670) 
     at java.lang.Class.getMethod(Class.java:1603) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:202) 
Caused by: java.lang.ClassNotFoundException: FileSystem 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
     ... 5 more 

Может кто-нибудь помочь мне с тем, что я не хватает или это мой способ исполнения не так?

Во-вторых, я хотел бы знать, как я могу запустить K-mean Clustering в CSV-файле?

Заранее спасибо :)

+0

Вы можете запустить примеры включены с Hadoop и Mahout? Может быть,„команда Hadoop“вы используете сломан и не устанавливает право. классов –

+0

я «Могу ли я запустить MR-код в этом кластере, и даже я могу запустить пример данных управления Mahout Synthetic. – user2454360

ответ

0

Данный код является недостоверным, код

Cluster cluster = new Cluster(vec, i, new EuclideanDistanceMeasure()); 
    writer.append(new Text(cluster.getIdentifier()), cluster); 
} 
writer.close(); 

KMeansDriver.run(conf, new Path("testdata/points"), new Path("testdata/clusters"), 
    new Path("output"), new EuclideanDistanceMeasure(), 0.001, 10, 
    true, false); 

SequenceFile.Reader reader = new SequenceFile.Reader(fs, 
    new Path("output/" + Cluster.CLUSTERED_POINTS_DIR 
      + "/part-m-00000"), conf); 

следует заменить

Kluster cluster = new Kluster(vec, i, new EuclideanDistanceMeasure()); 
    writer.append(new Text(cluster.getIdentifier()), cluster); 
} 
writer.close(); 

KMeansDriver.run(conf, new Path("testdata/points"), new Path("testdata/clusters"), 
    new Path("output"), new EuclideanDistanceMeasure(), 0.001, 10, 
    true, false); 

SequenceFile.Reader reader = new SequenceFile.Reader(fs, 
    new Path("output/" + Kluster.CLUSTERED_POINTS_DIR 
      + "/part-m-00000"), conf); 

кластер представляет собой интерфейс, тогда как Kluster является классом. Пожалуйста, проверьте Mahout API Javadoc для получения дополнительной информации.

Чтобы запустить kmeans с файлом csv, сначала вам нужно создать SequenceFile для передачи в качестве аргумента в KmeansDriver. Следующий код считывает каждую строку CSV-файла «points.csv» и преобразует его в вектор и записывает в точки «SequenceFile».далее»

try (
      BufferedReader reader = new BufferedReader(new FileReader("testdata2/points.csv")); 
      SequenceFile.Writer writer = new SequenceFile.Writer(fs, conf,new Path("testdata2/points.seq"), LongWritable.class, VectorWritable.class) 
     ) { 
      String line; 
      long counter = 0; 
      while ((line = reader.readLine()) != null) { 
       String[] c = line.split(","); 
       if(c.length>1){ 
        double[] d = new double[c.length]; 
        for (int i = 0; i < c.length; i++) 
          d[i] = Double.parseDouble(c[i]); 
        Vector vec = new RandomAccessSparseVector(c.length); 
        vec.assign(d); 

       VectorWritable writable = new VectorWritable(); 
       writable.set(vec); 
       writer.append(new LongWritable(counter++), writable); 
      } 
     } 
     writer.close(); 
    } 

Надеется, что это помогает !!

Смежные вопросы