私はprotobufsをHDFSに書き込むデータパイプラインを持っています。そのデータをクエリする方法が必要です。私は象と鳥を見つけ、この解決法を今のところ稼働させようとしています。ここで HiveとElephant-Birdでprotobuf 3を使う
は私が撮った手順は次のとおりです。 のHadoop 2.7.3、ハイブ2.1.1および3.0.0いるProtobuf2)クローニングされた象、鳥4.16をインストールして構築された
1)は成功しました
3)スタートハイブと.protoファイルのJavaクラスを生成するコア、ハイブとHadoopの-compatの瓶
4)を追加します。いるProtobuf-のjava-3.0.0.jarとパッケージと
5をハイブに追加します)は、次のように私が作成した外部コマンドを実行し、このすべての後
をハイブにいるProtobuf-javaの-3.0.0.jarを追加します。 :
create external table tracks
row format serde
"com.twitter.elephantbird.hive.serde.ProtobufDeserializer"
with serdeproperties (
"serialization.class"="protobuf.TracksProtos$Env")
stored as
inputformat "com.twitter.elephantbird.mapred.input.DeprecatedRawMultiInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
LOCATION '/tracks/';
そして、私はログにこのメッセージが表示されます。
2017-10-26T17:36:30,838 ERROR [main] util.Protobufs: Error invoking method getDescriptor in class class protobuf.TracksProtos$Env
java.lang.reflect.InvocationTargetException
.....
.....
.....
Caused by: java.lang.NoSuchMethodError: com.google.protobuf.Descriptors$Descriptor.getOneofs()Ljava/util/List;
私はハイブからjarファイルを一覧表示し、すべてがインストールされていたと私はそれらを展開する際に私ができる見ることができるので、これは真実ではありません知っています参照してください彼らは存在しないと信じるクラスです。
私が$ HIVE_HOME/libを見ると、protobuf-java-2.5.0.jarが使用されています。私はこれがこのエラーの原因であるのか、それを修正するオプションがあるのだろうかと思います。
思考?