运行Hbase Java API时出错

时间:2016-05-20 10:40:59

标签: java hadoop hbase

使用

成功编译了我的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)           at java.security.AccessController.doPrivileged(Native Method)           在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个

2 个答案:

答案 0 :(得分:1)

javac -cp `hbase classpath` CreateTable.java

java -cp `hbase classpath` CreateTable 

其中hbase classpath是集群类路径,其中集群已安装hbase jar文件 如果要查看hbase / lib的文件夹位置, 你可以去hbase shell并尝试enter image description here你的hbase lib jar将会显示在那里。

注意:如果你在构建中使用maven,那么你必须将'provided'设置为你提到groupid,artifactid等的范围......

答案 1 :(得分:0)

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

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

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