2012-06-01 2 views
0

В настоящее время я регистрирую всю активность на своей веб-странице на веб-сервере nginx, который находится в файле access.log. Этот файл непонятен из-за его формата, я хочу проанализировать эти файлы журналов, экспортируя их в Hadoop Hive. Тем не менее, улей не может понять сырые журналы nginx. Таким образом, я планирую регенерировать эти журналы в формате JSON или CSV, а затем экспортировать их в куст, где я могу запрашивать и анализировать журналы. Пожалуйста, предложите мне некоторые инструменты/методы, которые позволят мне выполнить вышеуказанную работу. В настоящее время мои журналы Nginx выглядеть следующим образом:Regenerate nginx logs

115.249.242.17 - - [01/Jun/2012:18:44:57 +0530] "GET /flashlayer?videoId=66127&playSessionId=VOD_66127_e04393db-0b40-44b1-aad8-aa2169ac71a710.32.6.1311338556485611&duration=0&playerState=playing&playerError=null HTTP/1.1" 200 86 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0" 

ответ

-1

Возможно, СЭД это лучший и самый простой инструмент для такой задачи.

+0

Я изменил с mongodb на nginx, чтобы избежать транзитной обработки журналов и может напрямую запрашивать улей, это только делает его хуже –

1

Учитывая приведенную в качестве примера строку журнала, вы можете создать таблицу верстки данных HDFS без каких-либо проблем.

Для начала вы можете использовать MetadataTypedColumnsetSerDe или RegexSerDe. MetadataTypedColumnsetSerDe обычно используется, когда поля записи разделяются одним и тем же символом, например, табуляцией или запятой и т. Д. Это SerDe, используемый по умолчанию, когда вы используете ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' в своем заявлении CREATE TABLE. Не нужно явно указывать SerDe.

RegexSerDe обычно используется, когда все записи соответствуют определенному регулярному выражению. Вы можете использовать группировку в этом регулярном выражении для извлечения фрагментов, которые вы делали бы с данными столбца. Пример RegexSerDe доступен here

Обратите внимание, что RegexSerDe хуже, чем исполнительская LazySimpleSerDe, так что вы должны предпочесть использование LazySimpleSerDe, где это возможно.

Также обратите внимание, что независимо от того, какой SerDe вы используете, у Уира в настоящее время есть ограничение на то, что одна запись вашей таблицы должна присутствовать в одном улье. Для слов вы не можете записать запись, пролитую на несколько строк вашего файла данных (очень часто, если данные находятся в XML), и вы не можете иметь несколько записей в одной строке. Есть способы обойти это ограничение, но, если возможно, избегать таких сценариев.