如何将AvroKeyValueOutputFormat文件导入配置单元?

时间:2014-04-10 09:17:51

标签: hadoop mapreduce hive cloudera avro

我的mapreduce使用AvroKeyValueOutputFormat写了一个avro文件,但是我将这个文件导入hive时遇到了一些麻烦。

我如何在hive中定义我的架构以使其正常工作?

2 个答案:

答案 0 :(得分:1)

您必须使用

中描述的AvroSerDe

http://goo.gl/TwsRTd

或者您必须将输出转换为您在定义的配置单元表中使用的RowFormat(再次使用另一个mapreduce作业)

此致

马丁

答案 1 :(得分:0)

AvroSerDe的格式可能有点棘手。只要你知道Avro架构虽然它往往会产生奇迹。希望这个例子有所帮助。

CREATE EXTERNAL TABLE HIVEDATA
ROW FORMAT
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='
{
    "namespace": "originalname",
    "name": "feature_value",
    "type": "record",
    "fields": [
        {"name": "acct_id", "type": "long"},
        {"name": "feature_name", "type": ["null","string"], "default": null},
        {"name": "namespace", "type": ["null","string"], "default": null},
        {"name": "feature_value", "type": ["null","double"], "default": null}
    ]
}
')
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION '/hdfs/location'
;