2017-10-10 11 views
0

je suis en train de créer une table sur Hbase (sur un cluster spécifié) et i essayez le code suivant:Causée par: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration

import org.apache.hadoop.hbase.client.{HTable, Put, HBaseAdmin} 
import org.apache.hadoop.hbase.util.Bytes 
import org.apache.hadoop.hbase.mapreduce.TableInputFormat 
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, HColumnDescriptor} 

object ImportData { 
    var cf = "d" 
    def createTable (TableName : String, NameSpace : String , reset : Boolean): HTable = { 

    // initialize configuration and admin 
    val Hbaseconfig = HBaseConfiguration.create() 
    val hbaseAdmin = new HBaseAdmin (Hbaseconfig) 

    // check if table exsit) 
    if (!hbaseAdmin.isTableAvailable(NameSpace + ":" + TableName) || (reset)) { 
     if (hbaseAdmin.isTableAvailable(NameSpace + ":" + TableName) && (reset)) { //force delete table 
     hbaseAdmin.disableTable(NameSpace + ":" + TableName) 
     hbaseAdmin.deleteTable(NameSpace + ":" + TableName) 
     } 

     val tableDesc = new HTableDescriptor ((NameSpace + ":" + TableName).getBytes()) 
     val tableFamily = new HColumnDescriptor(cf) 

     // Adding column families to table descriptor 
     tableDesc.addFamily(tableFamily) 
     // create table 
     hbaseAdmin.createTable(tableDesc) 
    } 


    Hbaseconfig.set(TableInputFormat.INPUT_TABLE, NameSpace + ":" + TableName) 
    val Table = new HTable(Hbaseconfig, NameSpace + ":" + TableName) 
    println (">>> Table " + Table + "created on Hbase") 
    return Table 
    } 
    // put data in table 
    def writetotable(table : HTable, columnname : List[String],value : List[String]){ 
    val Lsize = columnname.size-1 
    var p = new Put(Bytes.toBytes("row1")); 
    for (i <- 0 to Lsize){ 
     p.add(Bytes.toBytes(cf), Bytes.toBytes(columnname(i)),Bytes.toBytes(value(i))); 
    } 

    table.put (p); 
    table.close() 

    } 

} 
Je

courir avec étincelle sur un serveur HUE mais j'ai l'erreur folowing:

17/10/10 12:04:34 ERROR ApplicationMaster: User class threw exception: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration 
**java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration** 
    at com.renault.fic_histo.parsing.ImportData$.createTable(ImportData.scala:13) 
    at com.renault.fic_histo.parsing.Global_Main.save_fic_histo(Global_Main.scala:32) 
    at com.renault.fic_histo.parsing.Global_Main$.main(Global_Main.scala:47) 
    at com.renault.fic_histo.parsing.Global_Main.main(Global_Main.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:559) 
**Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration** 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

Je lis que je dois ajouter le classpath HBase dans le fichier hadoop-env.sh avec le code suivant:

$ export HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.94.22.jar:\ 
    $HBASE_HOME/hbase-0.94.22-test.jar:\ 
    $HBASE_HOME/conf:\ 
    ${HBASE_HOME}/lib/zookeeper-3.4.5.jar:\ 
    ${HBASE_HOME}/lib/protobuf-java-2.4.0a.jar:\ 
    ${HBASE_HOME}/lib/guava-11.0.2.jar 

Voici ma question: 1. Je ne l'utilise pas en local, donc je ne peux pas changer cette configuration. Que puis-je faire pour résoudre ce problème?
2. Dois-je me connecter ou spécifier le cluster hbase dans mon code? quelqu'un peut-il me donner un bon tutoriel pour le retourner?

Merci

Répondre

0

La hbase-common.jar contient la définition de classe pour org.apache.hadoop.hbase.HBaseConfiguration. Par conséquent, vous devez inclure hbase-common.jar dans HADOOP_CLASSPATH.

0

@Shubhangi
Merci, je me sers d'un projet Maven et j'ajouter la dépendance suivante:

<!-- Hbase common --> 
     <dependency> 
      <groupId>org.apache.hbase</groupId> 
      <artifactId>hbase-common</artifactId> 
      <version>${hbase.version}</version> 
     </dependency> 

avec <hbase.version>1.1.2.2.5.3.0-37</hbase.version>, je cours mon travail d'étincelle avec un pot sur une interface Hue, donc je ne peut pas changer le HADOOP_CLASSPATH.

Cette dépendance n'est pas suffisante?