title: How to run examples in mahout in action book
body: <p>I am trying to run the hello world example in chapter 7. I created the following in eclipse and then packed it into a jar:-</p>
  
  <pre><code>package com.mycode.mahout
  import java.io.File;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  
  import org.apache.hadoop.conf.Configuration;
  import org.apache.hadoop.fs.FileSystem;
  import org.apache.hadoop.fs.Path;
  import org.apache.hadoop.io.IntWritable;
  import org.apache.hadoop.io.LongWritable;
  import org.apache.hadoop.io.SequenceFile;
  import org.apache.hadoop.io.Text;
  import org.apache.mahout.clustering.WeightedVectorWritable;
  import org.apache.mahout.clustering.kmeans.Cluster;
  import org.apache.mahout.clustering.kmeans.KMeansDriver;
  import org.apache.mahout.common.distance.EuclideanDistanceMeasure;
  import org.apache.mahout.math.RandomAccessSparseVector;
  import org.apache.mahout.math.Vector;
  import org.apache.mahout.math.VectorWritable;
  
  public class SimpleKMeansClustering {
    public static final double[][] points = { {1, 1}, {2, 1}, {1, 2},
                                             {2, 2}, {3, 3}, {8, 8},
                                             {9, 8}, {8, 9}, {9, 9}};
  
    public static void writePointsToFile(List&lt;Vector&gt; points,
                                         String fileName,
                                         FileSystem fs,
                                         Configuration conf) throws IOException {
      Path path = new Path(fileName);
      SequenceFile.Writer writer = new SequenceFile.Writer(fs, conf,
          path, LongWritable.class, VectorWritable.class);
      long recNum = 0;
      VectorWritable vec = new VectorWritable();
      for (Vector point : points) {
        vec.set(point);
        writer.append(new LongWritable(recNum++), vec);
      }
      writer.close();
    }
  
    public static List&lt;Vector&gt; getPoints(double[][] raw) {
      List&lt;Vector&gt; points = new ArrayList&lt;Vector&gt;();
      for (int i = 0; i &lt; raw.length; i++) {
        double[] fr = raw[i];
        Vector vec = new RandomAccessSparseVector(fr.length);
        vec.assign(fr);
        points.add(vec);
      }
      return points;
    }
  
    public static void main(String args[]) throws Exception {
  
      int k = 2;
  
      List&lt;Vector&gt; vectors = getPoints(points);
  
      File testData = new File("testdata");
      if (!testData.exists()) {
        testData.mkdir();
      }
      testData = new File("testdata/points");
      if (!testData.exists()) {
        testData.mkdir();
      }
  
      Configuration conf = new Configuration();
      FileSystem fs = FileSystem.get(conf);
      writePointsToFile(vectors, "testdata/points/file1", fs, conf);
  
      Path path = new Path("testdata/clusters/part-00000");
      SequenceFile.Writer writer = new SequenceFile.Writer(fs, conf,
          path, Text.class, Cluster.class);
  
      for (int i = 0; i &lt; k; i++) {
        Vector vec = vectors.get(i);
        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);
  
      IntWritable key = new IntWritable();
      WeightedVectorWritable value = new WeightedVectorWritable();
      while (reader.next(key, value)) {
        System.out.println(value.toString() + " belongs to cluster "
                           + key.toString());
      }
      reader.close();
    }
  
  }
  </code></pre>
  
  <p>I packed it as myjob.jar</p>
  
  <p>now how shall I execute this on my cluster ?</p>
  
  <p>I tried following:-</p>
  
  <pre><code>hadoop jar myjob.jar com.mycode.mahout.SimpleKMeansClustering 
  java -jar myjob.jar
  java -cp myjob.jar
  </code></pre>
  
  <p>I get follwing error:-</p>
  
  <pre><code> [root@node1 tmp]# hadoop jar mahoutfirst.jar com.mahout.emc.SimpleKMeansClustering 
      Exception in thread "main" java.lang.NoClassDefFoundError:         org/apache/mahout/math/Vector`
          at java.lang.Class.forName0(Native Method)
          at java.lang.Class.forName(Class.java:270)
          at org.apache.hadoop.util.RunJar.main(RunJar.java:201)
      Caused by: java.lang.ClassNotFoundException: org.apache.mahout.math.Vector
          at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
          at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
          at java.security.AccessController.doPrivileged(Native Method)
          at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
          ... 3 more
  </code></pre>
  
  <p>Please advice what is the right way to run the code written using mahout.</p>