作者:寒风中挣扎_427 | 来源:互联网 | 2023-09-25 18:47
网站日志包含用户访问信息,通过日志分析我们可以了解网站的访问量、网页访问次数、网页访问人数、频繁访问时段等等,以便获取用户行为以优化网站的商业价值。由于网站每天会产生海量的日志,非
网站日志包含用户访问信息,通过日志分析我们可以了解网站的访问量、网页访问次数、网页访问人数、频繁访问时段等等,以便获取用户行为以优化网站的商业价值。由于网站每天会产生海量的日志,非常适合使用 百度MapReduce (简称BMR)这样的托管Hadoop服务。同时,BMR集成了Hive和Hue,开发者可以在友好的界面中通过SQL语句就能分析海量日志,大大降低了使用门槛。
下面将通过一个具体的例子来展示如何通过BMR来分析网站日志。
创建BMR集群
BMR集群有两种常见的模式:
- 按需:用户可以把数据保存在对象存储BOS中,创建BMR集群并绑定BOS,以便读写BOS中的数据进行海量数据分布式处理。处理完了可以释放集群以节省计算资源,而数据已经持久化在BOS中。这种计算与存储分离的按需模式,非常适合批处理的场景。
- 常驻:用户可以创建BMR集群,然后把数据存储在本地HDFS中处理,适合随时需要大数据处理的常驻场景。
两种场景互相补充,适合不同的需求。
这里将使用按需场景处理Nginx日志,示例数据可以从
这里 下载。下载以后请登录
百度开放云管理控制台 ,创建或者选择一个bucket并上传。比如,日志上传到名为bigdata的bucket的log目录中,之后便可以通过bos://bigdata/log提交给BMR,BMR会自动扫描文件夹下面所有的日志文件。现在进入百度MapReduce并创建集群,根据提示完成配置步骤。注意,在软件配置设置栏内,镜像类型请选择Hadoop 0.2.0并确保添加Hive和Hue应用。不出几分钟BMR会创建集群并把登录信息以短信的方式,请根据相应信息进行
SSH连接到集群
。
分析网站日志
Hue是一个开源的Apache Hadoop 图形界面系统,通过使用Hue我们可以在浏览器中与Hadoop集群交互来分析处理数据,例如创建数据集、执行Hive查询等。
考虑到安全因素,目前Hue的访问需要通过SSH。请参考
建立SSH Tunnel 并设置浏览器代理,然后
访问Hue Web界面 。
在分析之前,首先需要根据网站日志建立一张Hive表。在Hue菜单栏中选择查询编辑器、Hive,并输入以下SQL语句:
DROP TABLE IF EXISTS access_logs;
CREATE EXTERNAL TABLE access_logs (
remote_addr STRING comment 'client IP',
time_local STRING comment 'access time',
request STRING comment 'request URL',
status STRING comment 'HTTP status',
body_bytes_sent STRING comment 'size of response body',
http_referer STRING comment 'referer',
http_COOKIE STRING comment 'COOKIEs',
remote_user STRING comment 'client name',
http_user_agent STRING comment 'client browser info',
request_time STRING comment 'consumed time of handling request',
host STRING comment 'server host',
msec STRING comment 'consumed time of writing logs'
) COMMENT 'web access logs'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([0-9\\.]+) - \\[([^\\]]+)\\] \"([^\"]*)\"
([\\d]+) ([\\d]*) \"([^\"]*)\" \"([^\"]*)\"
([\\S]+) \"([^\"]*)\" ([0-9\\.]+) ([\\S]+)
([0-9\\.]+)"
)
STORED AS TEXTFILE
LOCATION "bos:///";
这样,Hive会重建access_logs表,然后通过正则表达式来解析日志文件。注意LOCATION需要跟上传日志文件所在的bucket和folder相对应,比如bos://bigdata/log。
成功创建access_logs表之后,便可以在Hive Editor左侧的辅助菜单中刷新数据库,找到access_logs表并预览示例数据:
定了表之后,便可以进行查询了。比如,以下语句可以统计网页请求的结果:
SELECT status, count(1)
FROM access_logs
GROUP BY status
切换到图表页,还可以以饼图的形式可视化数据:
使用下面的语句可以了解哪个时段网页访问量最大:
SELECT hour(from_unixtime(unix_timestamp(time_local, 'dd/MMMM/yyyy:HH:mm:ss Z'))) as hour, count(1) as pv
FROM access_logs
GROUP BY hour(from_unixtime(unix_timestamp(time_local, 'dd/MMMM/yyyy:HH:mm:ss Z')))
切换到图表页,可以以柱状图来可视化结果:
可见大量的访问在晚上九点,是不是需要在这段时间多投放一些广告呢?