hadoop命令執行hbase應用jar包時的環境變量加載問題

#問題描述java

  • 使用hadoop命令執行hbase應用jar包時,報以下錯誤:apache

    [hadoop@ breath ~]$ hadoop jar ~/HbaseTest-0.1.jar Test.HtableCreate Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration at Test.HtableCreate.main(HtableCreate.java:21) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.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 java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 7 moreoop

#問題分析spa

  • 查看hadoop的classpath發現並沒有hbase的相關依賴jar包.net

    [hadoop@ breath ~]$ hadoop classpath /opt/beh/core/hadoop/etc/hadoop:/opt/beh/core/hadoop/share/hadoop/common/lib/:/opt/beh/core/hadoop/share/hadoop/common/:/opt/beh/core/hadoop/share/hadoop/hdfs:/opt/beh/core/hadoop/share/hadoop/hdfs/lib/:/opt/beh/core/hadoop/share/hadoop/hdfs/:/opt/beh/core/hadoop/share/hadoop/yarn/lib/:/opt/beh/core/hadoop/share/hadoop/yarn/:/opt/beh/core/hadoop/share/hadoop/mapreduce/lib/:/opt/beh/core/hadoop/share/hadoop/mapreduce/:/opt/beh/core/hadoop/contrib/capacity-scheduler/*.jarcode

  • 嘗試在在環境變量CLASSPATH中添加$HBASE_HOME/lib/*無效。hadoop

  • 查看Hbase官方文檔中"HBase and MapReduce"-"HBase, MapReduce, and the CLASSPATH"詳細解釋了MapReduce與Hbase jar執行的關係ci

若是臨時使用環境變量可以下設置:element

HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-examples-VERSION.jar

若是永久生效能夠在hadoop-env.sh中設置HADOOP_CLASSPATH,以下設置:文檔

# Extra Java CLASSPATH elements.  Automatically insert capacity-scheduler.
if [ -z $HBASE_HOME  ];
then
   export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}
else
   export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${HBASE_HOME}/lib'/*'
fi
相關文章
相關標籤/搜索