Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration

Je suis en utilisant Hadoop 1.0.3 et HBase 0.94.22. Je suis en train de lancer un mappeur programme pour lire les valeurs à partir d'une table Hbase et de les exporter dans un fichier. J'obtiens l'erreur suivante:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:340)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Le code ci-dessous est

import java.io.IOException;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class Test {
static class TestMapper extends TableMapper<Text, IntWritable> {
private static final IntWritable one = new IntWritable(1);
public void map(ImmutableBytesWritable row, Result value, Context context) throws    IOException, InterruptedException
{
ImmutableBytesWritable userkey = new ImmutableBytesWritable(row.get(), 0 , Bytes.SIZEOF_INT);
String key =Bytes.toString(userkey.get());
context.write(new Text(key), one);
}
}
public static void main(String[] args) throws Exception {
HBaseConfiguration conf = new HBaseConfiguration();
Job job = new Job(conf, "hbase_freqcounter");
job.setJarByClass(Test.class);
Scan scan = new Scan();
FileOutputFormat.setOutputPath(job, new Path(args[0]));
String columns = "data";
scan.addFamily(Bytes.toBytes(columns));
scan.setFilter(new FirstKeyOnlyFilter());
TableMapReduceUtil.initTableMapperJob("test",scan, TestMapper.class, Text.class, IntWritable.class, job);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true)?0:1);
}
}

- Je obtenir le code ci-dessus exportées vers un fichier jar et sur la ligne de commande-je utiliser la commande ci-dessous pour exécuter le code ci-dessus.

hadoop jar /home/testdb.jar test

où test est le dossier dans lequel le mappeur de résultats doit être écrit.

J'ai vérifié un certain nombre d'autres liens comme Causés par: java.lang.ClassNotFoundException: org.apache.zookeeper.KeeperException où il a été suggéré d'inclure le zookeeper fichier dans le classpath, mais lors de la création du projet dans eclipse, j'ai déjà inclus zookeeper fichier à partir du répertoire lib de hbase. Le fichier que j'ai compris est zookeeper-3.4.5.jar. Sna également visité ce lien trop HBase - java.lang.NoClassDefFoundError en java , mais je suis en utilisant un mappeur de classe pour obtenir les valeurs de la table hbase pas n'importe quel client de l'API. Je sais que je fais une erreur quelque part, les gars, pourriez-vous svp m'aider ??

J'ai remarqué une autre chose étrange, quand j'ai supprimer tout le code dans la fonction principale exception de la première ligne " HBaseConfiguration conf = new HBaseConfiguration();", puis exporter le code dans un fichier jar et essayez de compiler le fichier jar hadoop jar test.jar j'obtiens toujours la même erreur. Il semble que ce soit je suis la définition de la conf variable de manière incorrecte ou il y a un problème avec mon environnement.

OriginalL'auteur Abhisekh | 2014-10-14