2017-01-19 11 views
1

Я разрабатываю приложение java с помощью kafka, искрового потока & hbase. После того как я скомпилировать код по мавена чистой установки, когда я запускаю мое приложение, я встретил следующее сообщение об ошибке:Protobuf Ошибка: Hbase createTable & put in java code (protobuf-LiteralByteString)

  • Hadoop вер: 2.7.3
  • HBase версии: HBase-0.98.24-hadoop2
  • Спарк : 2.1.0

Хотя я уже проверил &, применил предыдущие ответы на этом сайте, я все еще встречал проблему.

Спасибо ...

`Exception in thread "main" org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString 
at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:225) 
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:133) 
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:101) 
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:289) 
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:190) 
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:185) 
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:111) 
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:789) 
at org.apache.hadoop.hbase.catalog.MetaReader.fullScan(MetaReader.java:542) 
at org.apache.hadoop.hbase.catalog.MetaReader.tableExists(MetaReader.java:310) 
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:317) 
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:331) 

`

Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 

ответ

2

Apache Hadoop 2.7.3 имеет зависимость от Protobuf 2.5.0. Просмотр исходного кода Protobuf 2.5.0, класс com.google.protobuf.LiteralByteString виден здесь:

https://github.com/google/protobuf/blob/v2.5.0/java/src/main/java/com/google/protobuf/LiteralByteString.java

Однако этот класс не присутствует в более поздних версиях Protobuf. Например, здесь есть каталог COM/Google/Protobuf в недавнем 3.1.0 версии:

https://github.com/google/protobuf/tree/v3.1.0/java/core/src/main/java/com/google/protobuf

Исходя из этого, вполне вероятно, что ваше приложение подобрала версию Protobuf, кроме 2,5. 0 и поместите его в путь класса. Я рекомендую запустить mvn dependency:tree в вашем приложении, чтобы узнать, не набирает ли он несовместимую зависимость Protobuf (возможно, транзитивно). Если он выглядит в зависимостях Maven вашего приложения, то, возможно, что-то переопределяет путь к классам во время выполнения, когда вы запускаете приложение и получаете неправильную версию Protobuf.

+0

Благодарим вас так много! Решив проблему, изменив версию protobuf (v.2.5), как вы ответили. –

+0

@ChrisJoo, отлично! Рад помочь. :-) –