2015-01-21 4 views
0

Я использую Fluentd для захвата и консолидации данных журнала Apache в HDFS. Я настроил агент для записи данных на HDFS, то есть файл /etc/td-agent/td-agent.conf содержит:Hive create table statement для данных журнала Fluentd Apache

<source> 
    type tail 
    path /var/log/httpd/access_log 
    pos_file /var/log/td-agent/httpd-access.log.pos 
    tag apache.access 
    format apache2 
</source> 

<match apache.access> 
    type webhdfs 
    host fqdn.of.name.node 
    port 50070 
    path /data/access_logs/access.log.%Y%m%d_%H.${hostname}.log 
    flush_interval 10s 
</match> 

Я включил HDFS добавляет согласно Fluentd documentation. Потоки данных отлично. В течение последних нескольких недель он транслировал миллионы транзакций без сбоев.

Данные хранятся в файлах, которые содержат линии, как это:

2015-01-10T17:00:00Z apache.access {"host":"155.96.21.4","user":null,"method":"GET","path":"/somepage/index.html","code":200,"size":8192,"referer":null,"agent":"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)"} 

Каждая строка содержит три вкладки разделенных элементов:

  1. временной метки
  2. идентифицирующий тег
  3. JSON, содержащий ключ/значения для столбцов в журнале Apache

Я пытаюсь создать таблицу Hive и не знаю, как обрабатывать тот факт, что это смесь строк с разделителями вкладок и JSON в каждой строке. Я знаю, что у Hive есть десериализатор JSON, но я не думаю, что это сработает, потому что записи не являются чистыми JSON.

Есть ли у кого-нибудь предложение о том, как написать инструкцию create table для этих данных?

ответ

0

Попробуйте добавить следующий параметр к вашему out_wedhdfs конфигурации:

output_data_type json 

Это должно быть документировано. Я скоро обновлю документы.