2017-01-19 5 views
1

私はカフカ、スパークストリーム&のHBaseでJavaアプリケーションを開発しています。うたいるProtobufエラー:Javaコードに入れてのHBaseのcreateTable&(いるProtobuf-LiteralByteString)

  • のHadoop:2.7.3
  • のHBase版:HBaseの-0.98.24-hadoop2
  • スパーク、私は自分のアプリケーションを実行すると、私は次のようなエラーに会っ 私はクリーンインストールのmavenでコードをコンパイルした後、 :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それ以降のバージョンには存在しません。例えば、ここ最近の3.1.0バージョンでCOM /グーグル/いるProtobufディレクトリです。これに基づき

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

が、あなたのアプリケーションが2.5以外いるProtobufのバージョンを拾っている可能性があります。 0をクラスパスに配置します。あなたのアプリケーションにmvn dependency:treeを実行して、互換性のないProtobuf依存関係が(おそらく推移的に)取り上げられているかどうかを確認することをお勧めします。アプリケーションのMaven依存関係が正常に見える場合は、アプリケーションを起動して誤ったバージョンのProtobufを取得したときに、実行時にクラスパスをオーバーライドしている可能性があります。

+0

soooooooooありがとうございました!あなたが答えたようにprotobufバージョン(v.2.5)を変更して問題を解決しました。 –

+0

@ChrisJoo、優秀!喜んで助けてください。 :-) –

関連する問題