【发布时间】:2014-04-10 09:17:50
【问题描述】:
我的 mapreduce 使用 AvroKeyValueOutputFormat 编写了一个 avro 文件,但我在将该文件导入 hive 时遇到了一些麻烦。
我必须如何在 hive 中定义我的架构才能使其正常工作?
【问题讨论】:
标签: hadoop mapreduce hive cloudera avro
我的 mapreduce 使用 AvroKeyValueOutputFormat 编写了一个 avro 文件,但我在将该文件导入 hive 时遇到了一些麻烦。
我必须如何在 hive 中定义我的架构才能使其正常工作?
【问题讨论】:
标签: hadoop mapreduce hive cloudera avro
您必须使用中描述的 AvroSerDe
或者您必须将输出转换为您在定义的配置单元表中使用的 RowFormat(再次使用另一个 mapreduce 作业)
问候
马丁
【讨论】:
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'
;
【讨论】: