2015-10-13 2 views
1

Я получаю запутанное исключение ClassNotFoundException, когда я пытаюсь запустить ExportSnapshot с моего главного узла HBase. hbase shell и другие команды работают нормально, а мой кластер полностью работоспособен.ClassNotFoundException бросается при запуске ExportSnapshot

Это похоже на проблему с Classpath, но я не знаю, чего мне не хватает.

$ /usr/bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot ambarismoketest-snapshot -copy-to hdfs://10.0.1.90/apps/hbase/data -mappers 16 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/usr/lib/zookeeper/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
2015-10-13 20:05:02,339 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available 
2015-10-13 20:05:04,351 INFO [main] util.FSVisitor: No logs under directory:hdfs://cinco-de-nameservice/apps/hbase/data/.hbase-snapshot/impression_event_production_hbase-transfer-to-staging-20151013/WALs 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/Job 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.runCopyJob(ExportSnapshot.java:529) 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.run(ExportSnapshot.java:646) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.innerMain(ExportSnapshot.java:697) 
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.main(ExportSnapshot.java:701) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.Job 
    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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 5 more 

ответ

1

Проблема

Оказывается, это происходит потому, что mapreduce2 баночка не доступна в пути к классам. Путь к классам был правильно настроен, но у меня не было клиента mapreduce2, установленного на этом узле. Экспорт ExportSnapshot HBase, по-видимому, зависит от этих клиентских JAR при экспорте снимков в другой кластер, поскольку он записывает в HDFS.

Fix

Если вы используете Ambari:

  1. Load Ambari UI
  2. Подтяните узел, в котором вы работали под ExportSnapshot от и получая вышеуказанную ошибку
  3. Под "компонентами" , нажмите «Добавить»
  4. Нажмите «Mapreduce 2 client»

фон

Там есть билет здесь https://issues.apache.org/jira/browse/HBASE-9687 где название ClassNotFoundException is thrown when ExportSnapshot runs against hadoop cluster where HBase is not installed on the same node as resourcemanager. Название подразумевает, что установка диспетчера ресурсов является исправлением, и это может сработать; тем не менее, вам нужно, чтобы в пути класса hasoop mapreduce2 помещалось в classpath, и вы можете сделать это, просто установив клиент mapreduce2.

Для нас, в частности, причина, по которой наши снимки моментального снимка работали в один прекрасный день, и сломался следующим образом: наш мастер HBase включил нас в b/c другого вопроса, который у нас был. У нашего резервного мастера HBase не было клиентских JAR-карт mapreduce2, но исходный основной мастер сделал.

Смежные вопросы