运行 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 启动缓慢 -- 调用 watcher java.lang.NullPointerException 时出错:ZK 为 null
BigtableConnection API 失败;从元数据服务器获取访问令牌时出错