自定义InputFormat与Hive

时间:2011-10-07 21:23:23

标签: hadoop hive

更新:好的,原因是以下不能正常工作是因为我使用的是InputFormat API的新版本import org.apache.hadoop.mapred是旧的与import org.apache.hadoop.mapreduce是新的)。我遇到的问题是将现有代码移植到新代码中。有没有人有使用旧API编写多行InputFormat的经验?


尝试使用Hadoop / Hive处理Omniture的数据日志文件。文件格式是制表符分隔的,虽然大部分都非常简单,但它们允许您在字段中有多个新行和制表符,这些行和制表符由反斜杠(\\n\\t)进行转义。因此,我选择创建自己的InputFormat来处理多个换行符,并在Hive尝试在选项卡上进行拆分时将这些选项卡转换为空格。我刚刚尝试将一些示例数据加载到Hive中的表中并得到以下错误:

CREATE TABLE (...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 'OmnitureDataFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat';

FAILED: Error in semantic analysis: line 1:14 Input Format must implement InputFormat omniture_hit_data

奇怪的是我的输入格式确实扩展了org.apache.hadoop.mapreduce.lib.input.TextInputFormathttps://gist.github.com/4a380409cd1497602906)。

Hive是否要求您延长org.apache.hadoop.hive.ql.io.HiveInputFormat?如果是这样,我是否必须重写InputFormat和RecordReader的任何现有类代码,还是可以有效地改变它所扩展的类?

1 个答案:

答案 0 :(得分:2)

在查看LineReader和TextInputFormat的代码后想出来。创建了一个新的InputFormat来处理这个以及EscapedLineReader。

https://github.com/msukmanowsky/OmnitureDataFileInputFormat