您好,欢迎访问一九零五行业门户网

使用Hive的正则解析器RegexSerDe分析Nginx日志

使用hive的正则解析器regexserde分析nginx日志
1、环境:
hadoop-2.6.0 + apache-hive-1.2.0-bin
2、使用hive分析nginx日志,网站的访问日志部分内容为:
cat /home/hadoop/hivetestdata/nginx.txt
192.168.1.128 - - [09/jan/2015:12:38:08 +0800] get /avatar/helloworld.png http/1.1 200 1521 http://write.blog.linuxidc.net/postlist mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/34.0.1847.131 safari/537.36
183.60.212.153 - - [19/feb/2015:10:23:29 +0800] get /o2o/media.html?menu=3 http/1.1 200 16691 - mozilla/5.0 (compatible; baiduuspider; +)
这条日志里面有九列,每列之间是用空格分割的,
每列的含义分别是客户端访问ip、用户标识、用户、访问时间、请求页面、请求状态、返回文件的大小、跳转来源、浏览器ua。
我们使用hive中的正则表达式匹配这九列:
([^ ]*) ([^ ]*) ([^ ]*) (.∗) (\.*?\) (-|[0-9]*) (-|[0-9]*) (\.*?\) (\.*?\)
于此同时我们可以在hive中指定解析文件的序列化和反序列化解析器(serde),并且在hive中内置了一个org.apache.hadoop.hive.serde2.regexserde正则解析器,,我们可以直接使用它。
3、建表语句 
create table logs
(
host string,
identity string,
username string,
time string,
request string,
status string,
size string,
referer string,
agent string
)
row format serde 'org.apache.hadoop.hive.serde2.regexserde'
with serdeproperties (
input.regex = ([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\.*?\) (-|[0-9]*) (-|[0-9]*) (\.*?\) (\.*?\),
output.format.string = %1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s
)
stored as textfile;
4、加载数据: 
load data local inpath '/home/hadoop/hivetestdata/nginx.txt' into table logs;
查询每小时的访问量超过100的ip地址: 
select substring(time, 2, 14) datetime ,host, count(*) as count
from logs
group by substring(time, 2, 14), host
having count > 100
sort by datetime, count;
hive编程指南 pdf 中文高清版 
基于hadoop集群的hive安装
hive内表和外表的区别
hadoop + hive + map +reduce 集群安装部署
hive本地独立模式安装
hive学习之wordcount单词统计
hive运行架构及配置部署
hive 的详细介绍:请点这里
hive 的下载地址:请点这里
本文永久更新链接地址:
其它类似信息

推荐信息