简体   繁体   English

Hbase Java API连接错误

[英]Hbase Java API connection error

I'm trying to connect from A java Application to Hbase like this: 我试图像这样从A Java应用程序连接到Hbase:

Configuration config = HBaseConfiguration.create();
    config.set("hbase.zookeeper.quorum", "localhost");
    config.set("hbase.zookeeper.property.clientPort", "2181");
    config.set("zookeeper.znode.parent", "/hbase-unsecure");

    config.set("hbase.client.retries.number", Integer.toString(0));
    config.set("zookeeper.session.timeout", Integer.toString(60000));
    config.set("zookeeper.recovery.retry", Integer.toString(0));

    Connection conn = ConnectionFactory.createConnection(config);
    TableName TABLE_NAME = TableName.valueOf("weblog");
    Table table = conn.getTable(TABLE_NAME);
    Result r = table.get(new Get(Bytes.toBytes("row1")));
    System.out.println(r);

I builded the App into a JAR but when running it on the cluster with : 我将应用程序内置到一个JAR中,但是在集群上使用以下命令运行时:

hadoop jar hbaseConnect-0.0.1-SNAPSHOT.jar com.packagename.hbaseConnect.HbaseConnect

i get the following error: 我收到以下错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
    at com.DigiMerket.hbaseConnect.HbaseConnect.main(HbaseConnect.java:23)
    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.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
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 java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

I tried to add HBASE_CLASSPATH to HADOOP_CLASSPATH in hadoop-env like this ​post suggests but I get the same error.. 我试图HBASE_CLASSPATH添加到HADOOP_CLASSPATH在Hadoop的ENV喜欢这个岗位暗示,但我得到了同样的错误..

Issue solved by setting "HADOOP_CLASSPATH" as following and then in the same terminal run the hadoop/hbase jar: 通过如下设置“ HADOOP_CLASSPATH”解决问题,然后在同一终端中运行hadoop / hbase jar:

 export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:/usr/hdp/2.3.4.0-3485/hbase/lib/hbase-client.jar:/usr/hdp/2.3.4.0-3485/hbase/lib/hbase-common.jar:/usr/hdp/2.3.4.0-3485/hbase/lib/hbase-protocol-1.1.2.2.3.4.0-3485.jar:.:" 

Run the jar 运行罐子

hadoop  jar  hbaseConnect-0.0.1-SNAPSHOT.jar com.packagename.hbaseConnect.HbaseConnect

the log has prompt you run the jar need dependent other jar. 日志提示您运行jar需要依赖其他jar。 like hbase-client.jar 像hbase-client.jar

mkdir like libs and put you dependent jar into the dir of libs and use this command: java -Djava.ext.dirs=/xxx/xxx/xxx/lib -jar /xxx/xxx/you's jar mkdir像libs一样,将依赖的jar放入libs的目录中,并使用以下命令:java -Djava.ext.dirs = / xxx / xxx / xxx / lib -jar / xxx / xxx /您的jar

wish that can help u. 希望能对你有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM