错误 运行 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 等的范围...
使用
成功编译了我的 Hbase classjavac -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 并尝试
注意:如果您使用 maven 进行构建,那么您必须将 'provided' 设置为您提及 groupid、artifactid 等的范围...