最近寫一個hbase的mapper生成hfile文件,可是在執行jar包時,老是報Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/client/Scan錯誤,註釋掉這個方法以後,又報其餘的jar包找不到,彷佛老是找不到hbase的相關包:html
一開始執行命令:java
root@master1 lct]# hadoop jar testhfile.jar lct01 /out
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/client/Scan
at hbasetest.HfileCreate.main(HfileCreate.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
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.client.Scan
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 moreapache
後來看了官網,也給出了一些介紹關於這方面:app
https://hbase.apache.org/book.html#mapreduceoop
在請教了一塊兒工做的同事,肯定就是這個問題引發的,修改的執行命令:spa
[root@master1 lct]# HADOOP_CLASSPATH=`hbase classpath` hadoop jar testhfile.jar lct01 /out.net
這樣執行又出現一個權限問題,這是由於root用戶對hdfs目錄沒有讀寫權限,切換到hdfs用戶在執行這個命令,任務就沒問題了;htm
[root@master1 lct]# su hdfsblog
[hdfs@master1 lct]$ HADOOP_CLASSPATH=`hbase classpath` hadoop jar testhfile.jar lct01 /outhadoop
執行成功。