2

我有一个类似的问题

以下是我使用的:

  1. CDH4.4(蜂巢 0.10)
  2. protobuf-java-.2.4.1.jar
  3. 大象鸟蜂巢 4.6-SNAPSHOT.jar
  4. 大象鸟核心4.6-SNAPSHOT.jar
  5. 大象鸟hadoop-compat-4.6-SNAPSHOT.jar
  6. 包含 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;没有结果出来。

而且我找不到要调试的错误日志。

有人可以帮助我吗?

非常感谢

4

1 回答 1

4

问题已经解决了。

首先我将protobuf二进制数据直接放入HDFS,没有显示结果。

因为它不是那样工作的。

问了一些资深同事后,他们说protobuf二进制数据应该写入某种容器,某种文件格式,如hadoop SequenceFile等。

象鸟页面也写了信息,但一开始我无法完全理解。

将protobuf二进制数据写入sequenceFile后,就可以用hive读取protobuf数据了。

并且因为我使用的是 sequenceFile 格式,所以我使用了 create table 语法:

inputformat 'org.apache.hadoop.mapred.SequenceFileInputFormat'
outputformat 'org.apache.hadoop.mapred.SequenceFileOutputFormat'

希望它也可以帮助其他刚接触hadoop、hive、大象的人。

于 2015-01-10T04:22:51.283 回答