使用带有蜂巢的象鸟来读取protobuf数据

时间:2015-01-06 04:07:50

标签: hadoop hive protocol-buffers elephantbird

我遇到类似this one

的问题

以下是我使用的内容:

  1. CDH4.4(hive 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文件。
  7. 我流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;时,没有结果出来。

    我找不到任何有错误的日志进行调试。

    有人可以帮助我吗?

    非常感谢

1 个答案:

答案 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的人。