2017-10-10 185 views
0

我試圖創建一個的HBase表(在指定集羣上),我嘗試下面的代碼:產生的原因:拋出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() 

    } 

} 

我與HUE服務器上運行的火花,但我有如下因素的錯誤:

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) 

我讀,我有與下面的代碼hadoop-env.sh文件添加到HBase的類路徑:

$ 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 

這是我的問題: 1.我沒有在本地運行它,所以我無法更改此配置。我能做些什麼來解決這個問題?
2.我應該在我的代碼中連接或指定hbase羣集嗎?有人能給我一個很好的教程來啓動它嗎?

謝謝

回答

0

hbase-common.jar包含類定義爲org.apache.hadoop.hbase.HBaseConfiguration。因此,您需要在HADOOP_CLASSPATH中包含hbase-common.jar

0

@Shubhangi
謝謝你,我使用的是Maven的項目,我添加下面的依賴關係:

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

<hbase.version>1.1.2.2.5.3.0-37</hbase.version>, 我運行我用色相接口上的罐子火花的工作,所以我不能更改HADOOP_CLASSPATH

這種依賴性是不夠的?

相關問題