更新:好吧,原来的原因,下面不工作是因为我使用的InputFormat
API的新版本(import org.apache.hadoop.mapred
这是对老import org.apache.hadoop.mapreduce
这是新)。我的问题是将现有代码移植到新代码中。有没有人有使用旧API编写多行InputFormat
的经验?自定义InputFormat与蜂巢
试图处理Omniture的数据日志文件用Hadoop /蜂巢。文件格式是制表符分隔的,虽然大部分都很简单,但它们确实允许您在字段中有多个新的行和选项卡,这些行可以通过反斜杠(\\n
和\\t
)转义。因此,我选择创建自己的InputFormat来处理多个换行符,并在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.TextInputFormat
(https://gist.github.com/4a380409cd1497602906)。
Hive是否要求您扩展org.apache.hadoop.hive.ql.io.HiveInputFormat
而不是?如果是这样,我是否必须重写InputFormat和RecordReader的任何现有类代码,还是只能改变它正在扩展的类?