2012-07-27 102 views
1

我想通過在Hadoop文檔中使用批量加載方法described,從文本文件(幾GB)中快速批量填充HBase表。HBase completebulkload返回異常

我創建了一個HFile,我現在想推送到我的HBase表。

當我使用這個命令:

hadoop jar /home/hxcaine/hadoop/lib/hbase.jar completebulkload /user/hxcaine/dbpopulate/output/cf1 my_hbase_table 

作業開始,然後我得到這個異常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/ThreadFactoryBuilder 
     at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.doBulkLoad(LoadIncrementalHFiles.java:195) 
     at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.run(LoadIncrementalHFiles.java:696) 
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) 
     at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.main(LoadIncrementalHFiles.java:701) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68) 
     at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139) 
     at org.apache.hadoop.hbase.mapreduce.Driver.main(Driver.java:49) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:197) 
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.ThreadFactoryBuilder 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     ... 17 more 

不過,我可以看到,番石榴罐子是我的classpath中,當我檢查罐子裏面我可以看到ThreadFactoryBuilder.class

我使用這些版本(和套牢了):

  • Hadoop的0.20.2-cdh3u3
  • 的HBase 0.90.4-cdh3u3
  • 番石榴罐子:/ usr/lib中/ hadoop- 0.20/lib/guava-r09-jarjar.jar

我在classpath中有一個較老的番石榴罐,但我不知道它來自哪裏,我不認爲它應該有效果。

任何想法?

回答

4

如果運行時會發生什麼:

export HADOOP_CLASSPATH=`hbase classpath` 

運行負載過嗎?從堆棧跟蹤看來,雖然我很驚訝地發現這實際上是啓動了M/R作業,但它看起來像是實際任務之一所需的jar。

+0

你是一個拯救生命的人。沒有辦法,我會發現,否則,謝謝! – HXCaine 2012-07-30 10:51:03