我遇到类似this one
的问题以下是我使用的内容:
我流Protocol Buffer java tutorial创建我的数据“testbook”。
我
使用hdfs dfs -mkdir /protobuf_data
创建HDFS文件夹。
使用hdfs dfs -put testbook /protobuf_data
将“testbook”放入HDFS。
然后我按照elephant-bird web page创建表,语法是这样的:
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;
时,没有结果出来。
我找不到任何有错误的日志进行调试。
有人可以帮助我吗?
非常感谢
答案 0 :(得分:4)
问题已经解决了。
首先我将protobuf二进制数据直接放入HDFS,没有显示结果。
因为它不起作用。
在询问了一些资深同事之后,他们说protobuf二进制数据应该写成某种容器,一些文件格式,比如hadoop SequenceFile等。elephant-bird页面也写了这些信息,但首先我无法理解它。
将protobuf二进制数据写入sequenceFile后,我可以用hive读取protobuf数据。
因为我使用sequenceFile格式,所以我使用create table语法:
inputformat 'org.apache.hadoop.mapred.SequenceFileInputFormat'
outputformat 'org.apache.hadoop.mapred.SequenceFileOutputFormat'
希望它能帮助那些刚刚接触过hadoop,hive,elephant的人。