0

我目前正在将我网页上的所有活动记录到文件 access.log 中的 nginx 网络服务器。该文件因其格式而难以理解,我希望通过将这些日志文件导出到 Hadoop Hive 来分析它们。但是,hive 无法理解原始 nginx 日志。因此,我计划将这些日志重新生成为 JSON 或 CSV 格式,然后将它们导出到配置单元,以便我可以查询和分析日志。请向我推荐一些工具/方法,使我能够完成上述工作。目前我的 nginx 日志如下所示:

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"
4

2 回答 2

1

以您提供的日志行为例,您应该能够在 HDFS 数据之上创建 Hive 表而不会出现任何问题。

要开始使用,可以使用 MetadataTypedColumnsetSerDe 或 RegexSerDe。MetadataTypedColumnsetSerDe 通常在记录的字段由相同字符(例如制表符或逗号等)分隔时使用。这是您在语句中使用时默认使用的ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'SerDe CREATE TABLE。无需明确指定 SerDe。

当所有记录都匹配特定的正则表达式时,通常使用 RegexSerDe。您可以在此正则表达式上使用分组来提取您将制作列数据的部分。此处提供了 RegexSerDe 的示例

请注意,RegexSerDe 的性能比 LazySimpleSerDe 差,因此您应该尽可能使用 LazySimpleSerDe。

另请注意,无论您使用什么 SerDe,Hive 目前都有一个限制,即您的表的一条记录必须存在于一个 Hive 中。换句话说,您不能让一条记录溢出到数据文件的多行(如果数据是 XML,这很常见),也不能在一行中存在多条记录。有一些方法可以绕过这个限制,但如果可能的话,请避免这种情况。

于 2012-06-05T05:08:43.207 回答
-1

sed可能是完成此类任务的最佳和最简单的工具。

于 2012-06-02T11:54:20.537 回答