2017-10-26 5 views
1

私はprotobufsをHDFSに書き込むデータパイプラインを持っています。そのデータをクエリする方法が必要です。私は象と鳥を見つけ、この解決法を今のところ稼働させようとしています。ここで HiveとElephant-Birdでprotobuf 3を使う

は私が撮った手順は次のとおりです。

のHadoop 2.7.3、ハイブ2.1.1および3.0.0いるProtobuf

2)クローニングされた象、鳥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が使用されています。私はこれがこのエラーの原因であるのか、それを修正するオプションがあるのだろうかと思います。

思考?

答えて

1

私はハイブのソースをダウンロードし、次のコマンドを使用してコンパイルすることによってこの問題を解決することができた:

mvn -Dprotobuf.version=3.0.0 -Pdist clean package 

これは私がいるProtobuf-3.0.0とのハイブを使用することができました。その後、Hiveの新しいインストールに対してゾウを再コンパイルする必要がありました。

関連する問題