所有文档

          百度MapReduce BMR

          使用Hive分析网站日志

          概述

          网站日志包含用户访问信息,通过日志分析我们可以了解网站的访问量、网页访问次数、网页访问人数、频繁访问时段等等,以便获取用户行为以优化网站的商业价值。由于网站每天会产生海量的日志,非常适合使用百度MapReduce(简称BMR)这样的托管Hadoop服务。同时,BMR集成了Hive和Hue,开发者可在浏览器中与Hadoop集群交互,分析处理数据,完成创建数据集、执行Hive查询等操作,大大降低了使用门槛。

          示例日志

          示例日志是Nginx日志,存储在对象存储服务BOS的公共可读的路径中:

          • 存储在“华北-北京”区域的样例数据路径为:bos://datamart-bj/web-log-10k/,仅华北区域的BMR集群可用。
          • 存储在“华南-广州”区域的样例数据路径为:bos://datamart-gz/web-log-10k/,仅华南区域的BMR集群可用。

          关于百度智能云的区域说明,请参考区域选择说明

          分析过程总览

          使用BMR分析Niginx日志的过程如下:

          环境准备

          准备日志文件

          您可跳过此步直接使用百度智能云提供的示例日志。在熟悉日志分析后,可参考数据准备选择您自己的日志数据。

          创建BMR集群

          1. 打开“产品服务>MapReduce>百度MapReduce-集群列表”,点击“创建集群”,进入集群配置页面。
          2. 设置集群配置:根据界面提示,完成信息的填写。可参考下图:

          3. 在“集群配置”区选择镜像版本BMR 1.0.0(hadoop 2.7),并选择模板“hadoop”。
          4. 其他设置可保持默认设置,点击“下一步”,保持默认设置。再点击“下一步”至订单确认页。
          5. 点击“提交订单”。支付订单后,集群会在十分钟左右创建完成。

          访问Hue Web界面

          1. 打开“产品服务>MapReduce>百度MapReduce-集群列表”,点击已创建的集群,进入实例详情页面。
          2. 在“相关应用”栏中点击“Hue Web UI”。

          3. 在弹出的认证页面中输入创建集群时设置的用户名和密码,并点击“登录”。

          4. 创建您登录Hue服务的用户名和密码,输入后点击“Create Account”后进入Hue Web界面。

          分析网站日志

          建表

          1. 在分析之前,首先需要根据网站日志建立一张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://datamart-bj/web-log-10k";
          2. 输入语句后点击左侧的三角符号执行命令,这样,Hive会重建access_logs表,然后通过正则表达式来解析日志文件。
          3. 成功创建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')))

            查询结果可切换到图表页,或以柱状图来更直观的查看结果:

          分析结果

          网页访问量最大的时间点是晚上九点。

          上一篇
          定时分析日志数据
          下一篇
          BMR的混部方案