Hi guys,

I just looked at the code and noticed you use Class-relative classloader:

Class cl = Class.forName(job.get(DISTANCE_MEASURE_KEY));

This is effectively an attempt to load a class using the caller's class class loader (the class loader is loaded via ClassLoader.getCallerClassLoader()).Usually it makes more sense to use thread's context class loader (they may be different), so:

Thread.currentThread().getContextClassLoader().loadClass(...);

I teach classes today, but I'll review the code and see if I can fix it. Jeff, would you by any chance have an assembled-and-ready test case or example that causes this problem?

Dawid


Ted Dunning wrote:
Hmmm...

Is there a more elegant way to go here?  Is there a way for the
CanopyClusteringJob to infer which jar by looking at the class?  I think
that Hadoop does something like this via the class loader.

This current method looks ripe for very obscure bugs.


On 3/5/08 4:49 PM, "Grant Ingersoll" <[EMAIL PROTECTED]> wrote:

I changed the main's to pass in the location of the jar, since the ANT
task puts the jar in basedir/dist.  I made a comment about it on
Mahout-3.  The Canopy driver should do the right thing?????  I also
did the same thing w/ the k-means.


On Mar 5, 2008, at 2:52 PM, Jeff Eastman wrote:

Here's my job driver, it works fine with ManhattanDistanceMeasure but
not SystemLoadDistanceMeasure.

Jeff

public static void main(String[] args) {
   String input = args[0];
   String output = args[1];
   int t1 = new Integer(args[2]);
   int t2 = new Integer(args[3]);
   JobConf conf = new JobConf(
       com.collabnet.hadoop.systemload.access.DriverA.class);
   Path outPath = new Path(output);
   try {
     FileSystem dfs = FileSystem.get(conf);
     if (dfs.exists(outPath))
       dfs.delete(outPath);
     DriverA.runJob(input, output);
     DriverP.runJob(input, output);
     DriverC.runJob(output, output);
     CanopyClusteringJob.runJob(output + "/combined", output,
         SystemLoadDistanceMeasure.class.getName(), t1, t2,
         "apache-mahout-0.1-dev.jar");
     DriverS.runJob(output + "/clusters", output);
   } catch (IOException e) {
     e.printStackTrace();
   }
 }

-----Original Message-----
From: Ted Dunning [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 05, 2008 11:44 AM
To: [email protected]
Subject: Re: Class Loader Problem


Where is your code?


On 3/5/08 11:28 AM, "Jeff Eastman" <[EMAIL PROTECTED]> wrote:

I'm wondering if you can see anything
wrong with my packaging or, perhaps, how the Canopy class is going
about
instantiating it.


Reply via email to