错误 运行 Hbase Java API

Error Running Hbase Java API

使用

成功编译了我的 Hbase class
javac -cp "/hbase/lib/*" CreateTable.java

但是在 运行 期间它抛出错误

java CreateTable 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration at CreateTable.main(CreateTable.java:16) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration at java.net.URLClassLoader.run(URLClassLoader.java:366) at java.net.URLClassLoader.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 1 more

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

所以,您可能想要 运行 类似 java -cp ".;/hbase/lib/*" CreateTable 的东西,以便在 运行 时拥有与您在编译时使用的库相同的库,以及当前目录你编译的 .class 文件在哪里。

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

javac -cp `hbase classpath` CreateTable.java

java -cp `hbase classpath` CreateTable 

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

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