Pregunta

Im having trouble getting my hadoop jobs to run. Im getting the following exception:

java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.cassandra.hadoop.cql3.CqlOutputFormat at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857) at org.apache.hadoop.mapreduce.JobContext.getOutputFormatClass(JobContext.java:235) at org.apache.hadoop.mapred.Task.initialize(Task.java:513) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347) at org.apache.hadoop.mapred.Child$4.run(Child.java:255) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) at org.apache.hadoop.mapred.Child.main(Child.java:249) Caused by: java.lang.ClassNotFoundException: org.apache.cassandra.hadoop.cql3.CqlOutputFormat 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:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:810) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:855) ... 8 more

I definitely have the cassandra jars in $HADOOP_CLASSPATH and they are being found (I know this because if I move them out of the classpath then I get a NoClassDefFoundError exception instead).

Environment is: Ubuntu 12.10, Hadoop 1.2.1, Cassandra 1.2.13

¿Fue útil?

Solución 2

So it turned out to be as simple as not restarting all the hadoop deamons after changing the classpath. Doh!

Otros consejos

You will have to add the jars to DistributedCache so that they are available to the mapper at run time.

                DistributedCache.addArchiveToClassPath(new Path(path.toUri()
                    .getPath()), job);

Any custom jars which are not a part of the hadoop distribution have to be added this way if they are not included in the hadoop classpath of every node.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top