Обновление : Хорошо, причина в том, что нижеприведенное не работает, потому что я использую более новую версию InputFormat
API (import org.apache.hadoop.mapred
, которая является старой по сравнению с import org.apache.hadoop.mapreduce
что нового). Проблема, которую я имею, портирует существующий код на новый код. Кто-нибудь имел опыт написания многострочных InputFormat
с использованием старого API?
Попытка обработать файлы журнала данных Omniture с помощью Hadoop / Hive. Формат файла разделен табуляцией, и, будучи по большей части довольно простым, он позволяет вам иметь несколько новых строк и табуляций в поле, которые экранируются обратной косой чертой (\\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.TextInputFormat
(https://gist.github.com/4a380409cd1497602906).
Требует ли Hive, чтобы вы расширили org.apache.hadoop.hive.ql.io.HiveInputFormat
вместо этого? Если да, нужно ли мне переписывать какой-либо из моих существующих кодов классов для InputFormat и RecordReader или я могу просто просто изменить класс, который он расширяет?