Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将protobuf 3与蜂箱和象鸟一起使用_Java_Hadoop_Hive_Elephantbird - Fatal编程技术网

Java 将protobuf 3与蜂箱和象鸟一起使用

Java 将protobuf 3与蜂箱和象鸟一起使用,java,hadoop,hive,elephantbird,Java,Hadoop,Hive,Elephantbird,我有一个将protobufs写入HDFS的数据管道,现在我需要一种查询数据的方法。我偶然发现了象鸟和蜂巢,现在我已经试着运行一天了 以下是我采取的步骤: 1.)安装了Hadoop 2.7.3、Hive 2.1.1和Protobuf 3.0.0 2.)克隆象鸟4.16并成功制造 3.)启动hive并添加core、hive和hadoop compat JAR 4.)为.proto文件生成java类;使用protobuf-java-3.0.0.jar打包并添加到配置单元 5.)将protobuf-ja

我有一个将protobufs写入HDFS的数据管道,现在我需要一种查询数据的方法。我偶然发现了象鸟和蜂巢,现在我已经试着运行一天了

以下是我采取的步骤:

1.)安装了Hadoop 2.7.3、Hive 2.1.1和Protobuf 3.0.0

2.)克隆象鸟4.16并成功制造

3.)启动hive并添加core、hive和hadoop compat JAR

4.)为.proto文件生成java类;使用protobuf-java-3.0.0.jar打包并添加到配置单元

5.)将protobuf-java-3.0.0.jar添加到配置单元

完成所有这些操作后,我执行一个create external命令,如下所示:

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,并查看安装的所有jar,当我展开它们时,我可以看到它们认为不存在的类

如果我在$HIVE_HOME/lib下查看,我会发现它使用的是protobuf-java-2.5.0.jar。我想知道这是否是这个错误的原因,我的选项来纠正它


想法

我可以通过下载配置单元源代码并使用以下命令进行编译来解决此问题:

mvn -Dprotobuf.version=3.0.0 -Pdist clean package
这使我能够使用带有protobuf-3.0.0的Hive。然后,我需要根据我新安装的Hive重新编译大象鸟