You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hama.apache.org by ed...@apache.org on 2009/10/21 08:41:06 UTC

svn commit: r827901 - in /incubator/hama/trunk: ./ src/java/org/apache/hama/mapred/ src/java/org/apache/hama/mapreduce/ src/java/org/apache/hama/matrix/ src/test/org/apache/hama/mapred/ src/test/org/apache/hama/mapreduce/ src/test/org/apache/hama/matrix/

Author: edwardyoon
Date: Wed Oct 21 06:41:05 2009
New Revision: 827901

URL: http://svn.apache.org/viewvc?rev=827901&view=rev
Log:
Replacement of RandomMatrixMap/Reduce

Added:
    incubator/hama/trunk/src/java/org/apache/hama/mapreduce/
    incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixMapper.java
    incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixReducer.java
    incubator/hama/trunk/src/test/org/apache/hama/mapreduce/
    incubator/hama/trunk/src/test/org/apache/hama/mapreduce/TestRandomMatrixMapReduce.java
Removed:
    incubator/hama/trunk/src/test/org/apache/hama/mapred/TestRandomMatrixMapReduce.java
Modified:
    incubator/hama/trunk/CHANGES.txt
    incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixMap.java
    incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixReduce.java
    incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseMatrix.java
    incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseVector.java
    incubator/hama/trunk/src/java/org/apache/hama/matrix/SparseMatrix.java
    incubator/hama/trunk/src/test/org/apache/hama/matrix/TestAbstractMatrix.java

Modified: incubator/hama/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/CHANGES.txt?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/CHANGES.txt (original)
+++ incubator/hama/trunk/CHANGES.txt Wed Oct 21 06:41:05 2009
@@ -41,6 +41,7 @@
 
   IMPROVEMENTS
 
+    HAMA-203: Replacement of RandomMatrixMap/Reduce (edwardyoon)
     HAMA-197: Replacement for deprecated API of Hbase (edwardyoon)
     HAMA-188: Upgrade dependencies for hadoop/hbase 2.0 (edwardyoon)
     HAMA-192: Refactor top-level package (edwardyoon)

Modified: incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixMap.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixMap.java?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixMap.java (original)
+++ incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixMap.java Wed Oct 21 06:41:05 2009
@@ -37,6 +37,7 @@
 /**
  * Generate matrix with random elements
  */
+@Deprecated
 public class RandomMatrixMap extends MapReduceBase implements
     Mapper<IntWritable, IntWritable, IntWritable, MapWritable> {
   static final Logger LOG = Logger.getLogger(RandomMatrixMap.class);

Modified: incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixReduce.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixReduce.java?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixReduce.java (original)
+++ incubator/hama/trunk/src/java/org/apache/hama/mapred/RandomMatrixReduce.java Wed Oct 21 06:41:05 2009
@@ -32,7 +32,7 @@
 import org.apache.hadoop.mapred.Reporter;
 import org.apache.hama.io.VectorUpdate;
 import org.apache.log4j.Logger;
-
+@Deprecated
 public class RandomMatrixReduce extends MapReduceBase implements
     Reducer<IntWritable, MapWritable, IntWritable, VectorUpdate> {
   static final Logger LOG = Logger.getLogger(RandomMatrixReduce.class);

Added: incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixMapper.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixMapper.java?rev=827901&view=auto
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixMapper.java (added)
+++ incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixMapper.java Wed Oct 21 06:41:05 2009
@@ -0,0 +1,75 @@
+package org.apache.hama.mapreduce;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configurable;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.MapWritable;
+import org.apache.hadoop.mapreduce.Mapper;
+import org.apache.hama.matrix.DenseVector;
+import org.apache.hama.matrix.SparseVector;
+import org.apache.hama.matrix.Vector;
+import org.apache.hama.util.RandomVariable;
+import org.apache.log4j.Logger;
+
+public class RandomMatrixMapper extends
+    Mapper<IntWritable, IntWritable, IntWritable, MapWritable> implements
+    Configurable {
+  private Configuration conf = null;
+  static final Logger LOG = Logger.getLogger(RandomMatrixMapper.class);
+  protected int column;
+  protected double density;
+  protected int minNums;
+  protected String type;
+  protected Vector vector = new DenseVector();
+
+  public void map(IntWritable key, IntWritable value,
+      Context context)
+      throws IOException, InterruptedException {
+    LOG.info(key.get());
+    LOG.info(value.get());
+
+    if (type.equals("SparseMatrix")) {
+      for (int i = key.get(); i <= value.get(); i++) {
+        ((SparseVector) vector).clear();
+        for (int j = 0; j < minNums; j++) {
+          ((SparseVector) vector).set(RandomVariable.randInt(0, column - 1),
+              RandomVariable.rand());
+        }
+        context.write(new IntWritable(i), vector.getEntries());
+      }
+    } else {
+      for (int i = key.get(); i <= value.get(); i++) {
+        ((DenseVector) vector).clear();
+        for (int j = 0; j < column; j++) {
+          ((DenseVector) vector).set(j, RandomVariable.rand());
+        }
+        context.write(new IntWritable(i), vector.getEntries());
+      }
+    }
+  }
+
+  @Override
+  public Configuration getConf() {
+    return conf;
+  }
+
+  @Override
+  public void setConf(Configuration conf) {
+    this.conf = conf;
+    column = conf.getInt("matrix.column", 0);
+    density = Double.parseDouble(conf.get("matrix.density"));
+
+    double vv = (column / 100.0) * density;
+    minNums = Math.round((float) vv);
+    if (minNums == 0)
+      minNums = 1;
+
+    type = conf.get("matrix.type");
+    if (type.equals("SparseMatrix"))
+      vector = new SparseVector();
+    else
+      vector = new DenseVector();
+  }
+}

Added: incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixReducer.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixReducer.java?rev=827901&view=auto
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixReducer.java (added)
+++ incubator/hama/trunk/src/java/org/apache/hama/mapreduce/RandomMatrixReducer.java Wed Oct 21 06:41:05 2009
@@ -0,0 +1,25 @@
+package org.apache.hama.mapreduce;
+
+import java.io.IOException;
+
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.mapreduce.TableReducer;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.MapWritable;
+import org.apache.hadoop.io.Writable;
+import org.apache.hama.io.VectorUpdate;
+import org.apache.hama.util.BytesUtil;
+import org.apache.log4j.Logger;
+
+public class RandomMatrixReducer extends
+    TableReducer<IntWritable, MapWritable, Writable> {
+  static final Logger LOG = Logger.getLogger(RandomMatrixReducer.class);
+
+  public void reduce(IntWritable key, Iterable<MapWritable> values,
+      Context context) throws IOException, InterruptedException {
+    VectorUpdate update = new VectorUpdate(key.get());
+    update.putAll(values.iterator().next());
+    context.write(new ImmutableBytesWritable(BytesUtil.getRowIndex(key.get())),
+        update.getPut());
+  }
+}

Modified: incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseMatrix.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseMatrix.java?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseMatrix.java (original)
+++ incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseMatrix.java Wed Oct 21 06:41:05 2009
@@ -33,7 +33,9 @@
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Scanner;
 import org.apache.hadoop.hbase.io.Cell;
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.io.RowResult;
+import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.io.DoubleWritable;
 import org.apache.hadoop.io.IntWritable;
@@ -42,13 +44,14 @@
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.SequenceFile.CompressionType;
-import org.apache.hadoop.mapred.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
 import org.apache.hadoop.mapred.FileOutputFormat;
 import org.apache.hadoop.mapred.JobClient;
 import org.apache.hadoop.mapred.JobConf;
-import org.apache.hadoop.mapred.SequenceFileInputFormat;
 import org.apache.hadoop.mapred.SequenceFileOutputFormat;
 import org.apache.hadoop.mapred.lib.NullOutputFormat;
+import org.apache.hadoop.mapreduce.Job;
 import org.apache.hama.Constants;
 import org.apache.hama.HamaConfiguration;
 import org.apache.hama.io.BlockID;
@@ -58,9 +61,9 @@
 import org.apache.hama.io.VectorUpdate;
 import org.apache.hama.mapred.CollectBlocksMapper;
 import org.apache.hama.mapred.DummyMapper;
-import org.apache.hama.mapred.RandomMatrixMap;
-import org.apache.hama.mapred.RandomMatrixReduce;
 import org.apache.hama.mapred.VectorInputFormat;
+import org.apache.hama.mapreduce.RandomMatrixMapper;
+import org.apache.hama.mapreduce.RandomMatrixReducer;
 import org.apache.hama.matrix.algebra.BlockMultiplyMap;
 import org.apache.hama.matrix.algebra.BlockMultiplyReduce;
 import org.apache.hama.matrix.algebra.DenseMatrixVectorMultMap;
@@ -240,29 +243,23 @@
     LOG.info("Create the " + m + " * " + n + " random matrix : "
         + rand.getPath());
 
-    JobConf jobConf = new JobConf(conf);
-    jobConf.setJobName("random matrix MR job : " + rand.getPath());
-
-    jobConf.setNumMapTasks(conf.getNumMapTasks());
-    jobConf.setNumReduceTasks(conf.getNumReduceTasks());
-
+    Job job = new Job(conf, "random matrix MR job : " + rand.getPath());
     final Path inDir = new Path(TMP_DIR, "in");
-    FileInputFormat.setInputPaths(jobConf, inDir);
-    jobConf.setMapperClass(RandomMatrixMap.class);
-    jobConf.setMapOutputKeyClass(IntWritable.class);
-    jobConf.setMapOutputValueClass(MapWritable.class);
-
-    RandomMatrixReduce.initJob(rand.getPath(), RandomMatrixReduce.class,
-        jobConf);
-    jobConf.setSpeculativeExecution(false);
-    jobConf.setInt("matrix.column", n);
-    jobConf.set("matrix.type", TABLE_PREFIX);
-    jobConf.set("matrix.density", "100");
-
-    jobConf.setInputFormat(SequenceFileInputFormat.class);
-    final FileSystem fs = FileSystem.get(jobConf);
+    FileInputFormat.setInputPaths(job, inDir);
+    job.setMapperClass(RandomMatrixMapper.class);
+    
+    job.setMapOutputKeyClass(IntWritable.class);
+    job.setMapOutputValueClass(MapWritable.class);
+    
+    job.getConfiguration().setInt("matrix.column", n);
+    job.getConfiguration().set("matrix.type", TABLE_PREFIX);
+    job.getConfiguration().set("matrix.density", "100");
+
+    
+    job.setInputFormatClass(SequenceFileInputFormat.class);
+    final FileSystem fs = FileSystem.get(job.getConfiguration());
     int interval = m / conf.getNumMapTasks();
-
+    
     // generate an input file for each map task
     for (int i = 0; i < conf.getNumMapTasks(); ++i) {
       final Path file = new Path(inDir, "part" + i);
@@ -273,7 +270,7 @@
       } else {
         end = new IntWritable(m - 1);
       }
-      final SequenceFile.Writer writer = SequenceFile.createWriter(fs, jobConf,
+      final SequenceFile.Writer writer = SequenceFile.createWriter(fs, job.getConfiguration(),
           file, IntWritable.class, IntWritable.class, CompressionType.NONE);
       try {
         writer.append(start, end);
@@ -283,7 +280,21 @@
       System.out.println("Wrote input for Map #" + i);
     }
 
-    JobClient.runJob(jobConf);
+    job.setOutputFormatClass(TableOutputFormat.class);
+    job.setReducerClass(RandomMatrixReducer.class);
+    job.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, rand.getPath());
+    job.setOutputKeyClass(ImmutableBytesWritable.class);
+    job.setOutputValueClass(Writable.class);
+    
+    try {
+      job.waitForCompletion(true);
+    } catch (InterruptedException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    } catch (ClassNotFoundException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
     fs.delete(TMP_DIR, true);
     return rand;
   }
@@ -684,7 +695,7 @@
     jobConf.setInputFormat(VectorInputFormat.class);
     jobConf.set(VectorInputFormat.COLUMN_LIST, Constants.COLUMN);
 
-    FileInputFormat.addInputPaths(jobConf, path);
+    org.apache.hadoop.mapred.FileInputFormat.addInputPaths(jobConf, path);
 
     CollectBlocksMapper.initJob(collectionTable, bool, block_size, this
         .getRows(), this.getColumns(), jobConf);
@@ -719,7 +730,7 @@
     jobConf.setInputFormat(VectorInputFormat.class);
     jobConf.set(VectorInputFormat.COLUMN_LIST, Constants.COLUMN);
 
-    FileInputFormat.addInputPaths(jobConf, getPath());
+    org.apache.hadoop.mapred.FileInputFormat.addInputPaths(jobConf, getPath());
     jobConf.set(JacobiEigenValue.MATRIX, getPath());
     jobConf.setOutputFormat(NullOutputFormat.class);
     jobConf.setMapOutputKeyClass(IntWritable.class);
@@ -761,7 +772,7 @@
       jobConf.setInputFormat(JacobiEigenValue.PivotInputFormat.class);
       jobConf.set(JacobiEigenValue.PivotInputFormat.COLUMN_LIST,
           JacobiEigenValue.EIIND);
-      FileInputFormat.addInputPaths(jobConf, getPath());
+      org.apache.hadoop.mapred.FileInputFormat.addInputPaths(jobConf, getPath());
       jobConf.setMapOutputKeyClass(Pair.class);
       jobConf.setMapOutputValueClass(DoubleWritable.class);
 
@@ -844,10 +855,10 @@
       jobConf.setInputFormat(JacobiEigenValue.RotationInputFormat.class);
       jobConf.set(JacobiEigenValue.RotationInputFormat.COLUMN_LIST,
           JacobiEigenValue.EIIND);
-      FileInputFormat.addInputPaths(jobConf, getPath());
+      org.apache.hadoop.mapred.FileInputFormat.addInputPaths(jobConf, getPath());
       jobConf.setMapOutputKeyClass(NullWritable.class);
       jobConf.setMapOutputValueClass(NullWritable.class);
-      FileInputFormat.addInputPaths(jobConf, getPath());
+      org.apache.hadoop.mapred.FileInputFormat.addInputPaths(jobConf, getPath());
       jobConf.setOutputFormat(NullOutputFormat.class);
 
       JobManager.execute(jobConf);

Modified: incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseVector.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseVector.java?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseVector.java (original)
+++ incubator/hama/trunk/src/java/org/apache/hama/matrix/DenseVector.java Wed Oct 21 06:41:05 2009
@@ -313,4 +313,12 @@
       this.set(i, 0);
     }
   }
+  
+  public String toString() {
+    StringBuilder result = new StringBuilder();
+    for(int i = 0; i < this.size(); i++) {
+      result.append(this.get(i) + " ");
+    }
+    return result.toString();
+  }
 }

Modified: incubator/hama/trunk/src/java/org/apache/hama/matrix/SparseMatrix.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/java/org/apache/hama/matrix/SparseMatrix.java?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/src/java/org/apache/hama/matrix/SparseMatrix.java (original)
+++ incubator/hama/trunk/src/java/org/apache/hama/matrix/SparseMatrix.java Wed Oct 21 06:41:05 2009
@@ -27,21 +27,23 @@
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.io.Cell;
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.MapWritable;
 import org.apache.hadoop.io.SequenceFile;
+import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.SequenceFile.CompressionType;
-import org.apache.hadoop.mapred.FileInputFormat;
-import org.apache.hadoop.mapred.JobClient;
 import org.apache.hadoop.mapred.JobConf;
-import org.apache.hadoop.mapred.SequenceFileInputFormat;
+import org.apache.hadoop.mapreduce.Job;
+import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
 import org.apache.hama.Constants;
 import org.apache.hama.HamaConfiguration;
 import org.apache.hama.io.VectorUpdate;
-import org.apache.hama.mapred.RandomMatrixMap;
-import org.apache.hama.mapred.RandomMatrixReduce;
+import org.apache.hama.mapreduce.RandomMatrixMapper;
+import org.apache.hama.mapreduce.RandomMatrixReducer;
 import org.apache.hama.matrix.algebra.SparseMatrixVectorMultMap;
 import org.apache.hama.matrix.algebra.SparseMatrixVectorMultReduce;
 import org.apache.hama.util.BytesUtil;
@@ -119,29 +121,23 @@
     LOG.info("Create the " + m + " * " + n + " random matrix : "
         + rand.getPath());
 
-    JobConf jobConf = new JobConf(conf);
-    jobConf.setJobName("random matrix MR job : " + rand.getPath());
-
-    jobConf.setNumMapTasks(conf.getNumMapTasks());
-    jobConf.setNumReduceTasks(conf.getNumReduceTasks());
-
+    Job job = new Job(conf, "random matrix MR job : " + rand.getPath());
     final Path inDir = new Path(TMP_DIR, "in");
-    FileInputFormat.setInputPaths(jobConf, inDir);
-    jobConf.setMapperClass(RandomMatrixMap.class);
-    jobConf.setMapOutputKeyClass(IntWritable.class);
-    jobConf.setMapOutputValueClass(MapWritable.class);
-
-    RandomMatrixReduce.initJob(rand.getPath(), RandomMatrixReduce.class,
-        jobConf);
-    jobConf.setSpeculativeExecution(false);
-    jobConf.setInt("matrix.column", n);
-    jobConf.set("matrix.type", TABLE_PREFIX);
-    jobConf.set("matrix.density", String.valueOf(percent));
+    FileInputFormat.setInputPaths(job, inDir);
+    job.setMapperClass(RandomMatrixMapper.class);
+    
+    job.setMapOutputKeyClass(IntWritable.class);
+    job.setMapOutputValueClass(MapWritable.class);
+    
+    job.getConfiguration().setInt("matrix.column", n);
+    job.getConfiguration().set("matrix.type", TABLE_PREFIX);
+    job.getConfiguration().set("matrix.density", String.valueOf(percent));
 
-    jobConf.setInputFormat(SequenceFileInputFormat.class);
-    final FileSystem fs = FileSystem.get(jobConf);
-    int interval = m / conf.getNumMapTasks();
 
+    job.setInputFormatClass(SequenceFileInputFormat.class);
+    final FileSystem fs = FileSystem.get(job.getConfiguration());
+    int interval = m / conf.getNumMapTasks();
+    
     // generate an input file for each map task
     for (int i = 0; i < conf.getNumMapTasks(); ++i) {
       final Path file = new Path(inDir, "part" + i);
@@ -152,7 +148,7 @@
       } else {
         end = new IntWritable(m - 1);
       }
-      final SequenceFile.Writer writer = SequenceFile.createWriter(fs, jobConf,
+      final SequenceFile.Writer writer = SequenceFile.createWriter(fs, job.getConfiguration(),
           file, IntWritable.class, IntWritable.class, CompressionType.NONE);
       try {
         writer.append(start, end);
@@ -162,7 +158,21 @@
       System.out.println("Wrote input for Map #" + i);
     }
 
-    JobClient.runJob(jobConf);
+    job.setOutputFormatClass(TableOutputFormat.class);
+    job.setReducerClass(RandomMatrixReducer.class);
+    job.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, rand.getPath());
+    job.setOutputKeyClass(ImmutableBytesWritable.class);
+    job.setOutputValueClass(Writable.class);
+    
+    try {
+      job.waitForCompletion(true);
+    } catch (InterruptedException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    } catch (ClassNotFoundException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
     fs.delete(TMP_DIR, true);
     return rand;
   }

Added: incubator/hama/trunk/src/test/org/apache/hama/mapreduce/TestRandomMatrixMapReduce.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/test/org/apache/hama/mapreduce/TestRandomMatrixMapReduce.java?rev=827901&view=auto
==============================================================================
--- incubator/hama/trunk/src/test/org/apache/hama/mapreduce/TestRandomMatrixMapReduce.java (added)
+++ incubator/hama/trunk/src/test/org/apache/hama/mapreduce/TestRandomMatrixMapReduce.java Wed Oct 21 06:41:05 2009
@@ -0,0 +1,58 @@
+/**
+ * Copyright 2007 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hama.mapreduce;
+
+import java.io.IOException;
+
+import org.apache.hama.HamaCluster;
+import org.apache.hama.matrix.DenseMatrix;
+import org.apache.hama.matrix.SparseMatrix;
+import org.apache.log4j.Logger;
+
+public class TestRandomMatrixMapReduce extends HamaCluster {
+  static final Logger LOG = Logger.getLogger(TestRandomMatrixMapReduce.class);
+  
+  public void testRandomMatrixMapReduce() throws IOException {
+    DenseMatrix rand = DenseMatrix.random_mapred(conf, 20, 20);
+    assertEquals(20, rand.getRows());
+    assertEquals(20, rand.getColumns());
+    
+    for(int i = 0; i < 20; i++) {
+      for(int j = 0; j < 20; j++) {
+        assertTrue(rand.get(i, j) > 0);
+      }
+    }
+
+    rand.close();
+    
+    SparseMatrix rand2 = SparseMatrix.random_mapred(conf, 20, 20, 30);
+    assertEquals(20, rand2.getRows());
+    assertEquals(20, rand2.getColumns());
+    boolean zeroAppear = false;
+    for(int i = 0; i < 20; i++) {
+      for(int j = 0; j < 20; j++) {
+        if(rand2.get(i, j) == 0.0)
+          zeroAppear = true;
+      }
+    }
+    assertTrue(zeroAppear);
+    rand2.close();
+  }
+}

Modified: incubator/hama/trunk/src/test/org/apache/hama/matrix/TestAbstractMatrix.java
URL: http://svn.apache.org/viewvc/incubator/hama/trunk/src/test/org/apache/hama/matrix/TestAbstractMatrix.java?rev=827901&r1=827900&r2=827901&view=diff
==============================================================================
--- incubator/hama/trunk/src/test/org/apache/hama/matrix/TestAbstractMatrix.java (original)
+++ incubator/hama/trunk/src/test/org/apache/hama/matrix/TestAbstractMatrix.java Wed Oct 21 06:41:05 2009
@@ -47,7 +47,7 @@
       }
     }
   }
-  
+
   public void normTest(Matrix matrix) throws IOException {
     double norm1 = matrix.norm(Norm.One);
     double verify_norm1 = MatrixTestCommon.verifyNorm1(matrix);