Пользовательский InputFormat с Hive - PullRequest
4 голосов
/ 08 октября 2011

Обновление : Хорошо, причина в том, что нижеприведенное не работает, потому что я использую более новую версию 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 или я могу просто просто изменить класс, который он расширяет?

1 Ответ

2 голосов
/ 09 октября 2011

Понял это после просмотра кода для LineReader и TextInputFormat. Создан новый InputFormat для решения этой проблемы, а также EscapedLineReader.

https://github.com/msukmanowsky/OmnitureDataFileInputFormat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...