运行 Hbase Java API 时出错

Posted

技术标签:

【中文标题】运行 Hbase Java API 时出错【英文标题】:Error Running Hbase Java API 【发布时间】:2016-09-17 14:16:11 【问题描述】:

使用成功编译了我的 Hbase 类

javac -cp "/hbase/lib/*" CreateTable.java

但是在运行过程中它会抛出错误

java CreateTable 

线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration 在 CreateTable.main(CreateTable.java:16) 引起:java.lang.ClassNotFoundException:org.apache.hadoop.hbase.HBaseConfiguration 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 1 更多

【问题讨论】:

【参考方案1】:

除了指定您所依赖的库的类路径以编译您的程序外,您还需要在执行程序时指定它们。依赖项不是“编译入”的,它们只是在编译期间被引用以确保它们被正确链接,但它们也需要在运行时存在。

因此,您可能希望运行 java -cp ".;/hbase/lib/*" CreateTable 之类的东西,以便在运行时拥有与在编译时使用的库相同的库,以及编译后的 .class 文件所在的当前目录。

在企业程序中,通常使用像 Maven 这样的依赖管理系统,或者至少是大多数 IDE 中内置的系统,用于帮助跟踪依赖关系并以正确的路径调用 Java 和相关工具。

【讨论】:

我也试过了,在这种情况下它会抛出错误: 错误:无法找到或加载主类 CreateTable 但在 CreateTable.class 中存在 我已经更新了我的答案;你需要包括“。”在类路径中包含已编译的 .class 文件所在的路径。我已经有一段时间没有手动处理类路径了。【参考方案2】:
javac -cp `hbase classpath` CreateTable.java

java -cp `hbase classpath` CreateTable 

其中hbase classpath 是集群安装了hbase jar 文件的集群类路径 如果您想查看 hbase/lib 的文件夹位置, 您可以转到 hbase shell 并尝试 您的 hbase lib jar 将在那里显示。

注意:如果您使用 maven 进行构建,那么您必须将“提供”设置为您提及 groupid、artifactid 等的范围...

【讨论】:

是的,我已经给出了 hbase 库的完整文件夹位置。程序已编译并创建了类文件,但由于找不到类的错误,我正在执行它 您的意思是运行时您已将hbase classpath 作为java 命令的类路径,但您仍然无法执行该类.. 不是吗?如果是这种情况,您可以复制粘贴您使用的命令。上面的方法应该可行。 编译用 javac -cp "/opt/mapr/hbase/hbase-0.98.12/lib/*" CreateTable.java 和执行用 java -cp "/opt/mapr/hbase/hbase- 0.98.12/lib/*" 创建表 这是您的 lib 目录下的 jar 文件 hbase-clientxxxx.jar 文件,如下所示 ...home/hadoop/SW/hbase/lib/hbase-client-0.98.12-hadoop2.jar 其中org/apache/hadoop/hbase/HBaseConfiguration 类在那里。你能检查一下吗?

以上是关于运行 Hbase Java API 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Hbase的java API遇到的问题以及解决方法

hbase 启动缓慢 -- 调用 watcher java.lang.NullPointerException 时出错:ZK 为 null

BigtableConnection API 失败;从元数据服务器获取访问令牌时出错

Ubuntu HBASE 创建文件出错?

使用 MapReduce 程序将值发送到 HBase 表时出错

Trafodion 安装错误:运行 traf_start 时出错