我也有类似的问题
以下是我使用的:
cdh4.4(Hive0.10)
protobuf java-.2.4.1.jar
elephant-bird-hive-4.6-snapshot.jar
elephant-bird-core-4.6-snapshot.jar
elephant-bird-hadoop-compat-4.6-snapshot.jar
包含protoc编译的.class文件的jar文件。
我的流协议缓冲区java教程创建了我的数据“testbook”。
我呢
使用 hdfs dfs -mkdir /protobuf_data
创建hdfs文件夹。
使用 hdfs dfs -put testbook /protobuf_data
将“testbook”放到hdfs中。
然后我按照象鸟网页创建表,语法如下:
create table addressbook
row format serde "com.twitter.elephantbird.hive.serde.ProtobufDeserializer"
with serdeproperties (
"serialization.class"="com.example.tutorial.AddressBookProtos$AddressBook")
stored as
inputformat "com.twitter.elephantbird.mapred.input.DeprecatedRawMultiInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
LOCATION '/protobuf_data/';
一切顺利。
但当我提交查询时 select * from addressbook;
没有结果。
我找不到任何要调试的错误日志。
有人能帮我吗?
非常感谢
1条答案
按热度按时间kx1ctssn1#
问题已经解决了。
首先我将protobuf二进制数据直接放入hdfs,没有结果显示。
因为这样不行。
在询问了一些资深同事之后,他们说二进制数据的protobuf应该被写入某种容器,某种文件格式,比如hadoop sequencefile等等。
elephant-bird 网页也写了信息,但首先我不能完全理解它。
将protobuf二进制数据写入sequencefile后,我可以用hive读取protobuf数据。
因为我使用的是sequencefile格式,所以我使用的是create table语法:
希望它能帮助其他刚接触hadoop、hive、elephant的人。