incubator-giraph-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claudio Martella <claudio.marte...@gmail.com>
Subject Re: Error in instantiating custom Vertex class via InternalVertexRunner.run
Date Sat, 03 Mar 2012 13:55:39 GMT
A part of your issues, I am looking forward to see who you are going to
attack this problem.
Please keep us posted on your progress.

On Saturday, March 3, 2012, Sebastian Schelter <ssc@apache.org> wrote:
> Hi Benjamin,
>
> Does your vertex class have a publicly accessible no-arg constructor?
> That's implicitly required because each Vertex class implements Writable.
>
> If you want to use to have a look at your code, you could maybe put it
> on github?
>
> Best,
> Sebastian
>
> On 02.03.2012 20:51, Benjamin Heitmann wrote:
>> Hello,
>>
>> in the last week I started working with Apache Giraph. My goal is to
implement a version of the
>> spreading activation algorithm (as described on Wikipedia [1] and in
this article [2] ).
>> Using Giraph will hopefully allow scaling for Linked Data/RDF from
DBPedia.
>>
>> I used the ConnectedComponentsVertex Example (and its UnitTest) as the
>> starting point for my own Vertex, TextInputFormat, TextOutputFormat and
UnitTest (and a class for VertexData/State).
>> In addition, I ensured that the ConnectedComponentsVertexTest runs
successfully, both from the giraph source tree
>> and from my own project.
>>
>> My Vertex class is called SpreadingActivationVertex, and it directly
extends BasicVertex, and it has the following <I, V, E, M> signature:
>> public abstract class SpreadingActivationVertex extends
>> BasicVertex<IntWritable, SpreadingActivationStateWritable, NullWritable,
DoubleWritable>
>> As you can see, I need to maintain more then one variable for the state
of the vertex,
>> and I need to pass doubles as messages.
>>
>> When I execute my UnitTest, I get the following error:
>>
>> 59820 [Thread-4] WARN  org.apache.hadoop.mapred.LocalJobRunner  -
job_local_0001
>> java.lang.RuntimeException: java.lang.InstantiationException
>>       at
org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115)
>>       at org.apache.giraph.graph.BspUtils.createVertex(BspUtils.java:365)
>>       at
ie.deri.uimr.ld_sa.prototyping.giraph.SpreadingActivationTextInputFormat$SpreadingActivationVertexReader.getCurrentVertex(SpreadingActivationTextInputFormat.java:53)
>>       at
org.apache.giraph.graph.BspServiceWorker.readVerticesFromInputSplit(BspServiceWorker.java:440)
>>       at
org.apache.giraph.graph.BspServiceWorker.loadVerticesFromInputSplit(BspServiceWorker.java:371)
>>       at
org.apache.giraph.graph.BspServiceWorker.loadVertices(BspServiceWorker.java:305)
>>       at
org.apache.giraph.graph.BspServiceWorker.setup(BspServiceWorker.java:583)
>>       at org.apache.giraph.graph.GraphMapper.setup(GraphMapper.java:474)
>>       at org.apache.giraph.graph.GraphMapper.run(GraphMapper.java:646)
>>       at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
>>       at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
>>       at
org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:210)
>> Caused by: java.lang.InstantiationException
>>       at
sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
>>       at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>>       at
org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:113)
>>       ... 11 more
>>
>>
>> Using the eclipse debugger, I traced it to these lines of code in Hadoop:
>>
>> org.apache.hadoop.util.ReflectionUtils, line 113 in newInstance():
>>
>>     try {
>>       Constructor<T> meth = (Constructor<T>)
CONSTRUCTOR_CACHE.get(theClass);
>>       if (meth == null) {
>>         meth = theClass.getDeclaredConstructor(EMPTY_ARRAY);
>>         meth.setAccessible(true);
>>         CONSTRUCTOR_CACHE.put(theClass, meth);
>>       }
>>       result = meth.newInstance();    // <<<------------ this is the
line causing the error
>>     } catch (Exception e) {
>>       throw new RuntimeException(e);
>>     }
>>
>> The constructor cache does not contain my vertex class, however the next
lines successfully find the right constructor and put it into "meth".
>> However, the invocation of meth.newInstance() fails with the above error.
>>
>>
>> Did somebody have this error before ?
>> What did I miss ?
>> The class itself is successfully found, so it is not an issue of setting
some paths.
>> How

-- 
   Claudio Martella
   claudio.martella@gmail.com

Mime
View raw message