Hadoop学习之Hadoop案例分析

1、日志数据分析
1.背景
1.1 ***论坛日志,数据分为两部分组成,原来是一个大文件,是56GB;之后天天生成一个文件,大约是150-200MB之间;php

每行记录有5部分组成:1.访问ip;2.访问时间;3.访问资源;4.访问状态;5.本次流量mysql

1.2 日志格式是apache common日志格式;
1.3 分析一些核心指标,供运营决策者使用;sql

1.3.1 浏览量PV shell

    定义:页面浏览量即为PV(Page View),是指全部用户浏览页面的总和,一个独立用户每打开一个页面就被记录1 次。分析:网站总浏览量,能够考核用户对于网站的兴趣,就像收视率对于电视剧同样。可是对于网站运营者来讲,更重要的是每一个栏目下的浏览量。计算公式:记录计数。注意要和后面的IP数区分开来,浏览量能够包括重复ip地址。apache

1.3.2 注册用户数服务器

    计算公式:对访问member.php?mod=register的url,计数网络

1.3.3 IP数 dom

    定义:一天以内,访问网站的不一样独立IP 个数求和,其中同一IP不管访问了几个页面,独立IP 数均为1。分析:这是咱们最熟悉的一个概念,不管同一个IP上有多少电脑,或者其余用户,从某种程度上来讲,独立IP的多少,是衡量网站推广活动好坏最直接的数据。公式:对不一样ip计数工具

1.3.4 跳出率 oop

    定义:只浏览了一个页面便离开了网站的访问次数占总的访问次数的百分比,即只浏览了一个页面的访问次数 / 所有的访问次数汇总。分析:跳出率是很是重要的访客黏性指标,它显示了访客对网站的兴趣程度:跳出率越低说明流量质量越好,访客对网站的内容越感兴趣,这些访客越多是网站的有效用户、忠实用户。

    该指标也能够衡量网络营销的效果,指出有多少访客被网络营销吸引到宣传产品页或网站上以后,又流失掉了,能够说就是煮熟的鸭子飞了。好比,网站在某媒体上打广告推广,分析从这个推广来源进入的访客指标,其跳出率能够反映出选择这个媒体是否合适,广告语的撰写是否优秀,以及网站入口页的设计是否用户体验良好。

计算公式:(1)统计一天内只出现一条记录的ip,称为跳出数;(2)跳出数/PV

1.3.5 板块热度排行

     定义:版块的访问状况排行。分析:巩固热点版块成绩,增强冷清版块建设。同时对学科建设也有影响。计算公式:按访问次数统计排序


1.4 开发该系统的目的是分了获取一些业务相关的指标,这些指标在第三方工具中没法得到的;

2 开发步骤

  2.1 使用flume将日志文件上传到HDFS;

        若是是日志服务器数据较小、压力较小,能够直接使用shell命令把数据上传到HDFS中;若是是日志服务器数据较大、压力较答,使用NFS在另外一台服务器上上传数据;若是日志服务器很是多、数据量大,使用flume进行数据处理;

    2.2 编写MapReduce程序对HDFS中的数据进行清洗;

    2.3 使用Hive对清洗后的数据进行统计;

    2.4 将统计后的数据经过Sqoop导出到MySql中;

    2.5 若是须要查看详细数据,则能够经过HBase进行展示;

3 详细概述

   3.1 使用Shell数据将数据从Linux上传到HDFS中

       3.1.1 首先在HDFS上建立目录

      命令:$HADOOP_HOME/bin/hadoop fs -mkdir /hmbbs_logs

       3.1.2 编写Shell脚本,用于上传文件到HDFS中

      yesterday=`date --date='1 days ago' +%Y_%m_%d`
            hadoop fs -put /apache_logs/access_${yesterday}.log   /hmbbs_logs

       3.1.3 把脚本upload_to_hdfs.sh配置到crontab(定时器)中,执行命令crontab -e, 写法以下

       * 1 * * * upload_to_hdfs.sh

  3.2 使用MapReduce对数据进行清洗,将清洗后的数据保存到HDFS中的/hmbbs_cleaned目录下,天天产生一个子目录

  3.3 使用Hive对清洗后的数据进行统计

    3.3.1 首先创建一个外部分区表,脚本以下

       CREATE EXTERNAL TABLE hmbbs(ip string, atime string, url string) PARTITIONED BY (logdate string) ROW FORMAT DELIMITED FIELDS        TERMINATED BY '\t' LOCATION '/hmbbs_cleaned';

    3.3.2 对新建表增长分区,脚本以下

        ALTER TABLE hmbbs ADD PARTITION(logdate='2013_05_30') LOCATION '/hmbbs_cleaned/2013_05_30';
              把代码增长到upload_to_hdfs.sh中,内容以下
              hive -e "ALTER TABLE hmbbs ADD PARTITION(logdate='${yesterday}') LOCATION '/hmbbs_cleaned/${yesterday}';"

    3.3.3 对数据进行统计,代码以下

       CREATE TABLE hmbbs_pv_2013_05_30 AS SELECT COUNT(1) AS PV FROM hmbbs WHERE logdate='2013_05_30';
              统计每日的注册用户数,代码以下
              CREATE TABLE hmbbs_reguser_2013_05_30 AS SELECT COUNT(1) AS REGUSER FROM hmbbs WHERE logdate='2013_05_30' AND 
              统计每日的独立ip,代码以下
              CREATE TABLE hmbbs_ip_2013_05_30 AS SELECT COUNT(DISTINCT ip) AS IP FROM hmbbs WHERE logdate='2013_05_30';
              统计每日的跳出用户,代码以下
              CREATE TABLE hmbbs_jumper_2013_05_30 AS SELECT COUNT(1) AS jumper FROM (SELECT COUNT(ip) AS times FROM hmbbs WHERE
              把天天统计的数据放入一张表
              CREATE TABLE hmbbs_2013_05_30 AS SELECT '2013_05_30', a.pv, b.reguser, c.ip, d.jumper FROM hmbbs_pv_2013_05_30                  hmbbs_reguser_2013_05_30 b ON 1=1 JOIN hmbbs_ip_2013_05_30 c ON 1=1 JOIN hmbbs_jumper_2013_05_30 d ON 1=1 ;

  3.4 使用Sqoop将统计结果导出到MySql中

    sqoop export --connect jdbc:mysql://hadoop0:3306/hmbbs --username root --password admin --table hmbbs_logs_stat --fields-  terminated-by '\001' --export-dir '/user/hive/warehouse/hmbbs_2013_05_30'

  3.5 完善执行的shell脚本

    3.5.1 初始化数据的脚本

    3.5.2 每日执行的脚本

4 表结构

  4.1 HBase表结构

    

明细表

行键

ip:date:random

明细列族

cf:all

 

  4.2 MySql表结构

    

ip、版块访问表

日期

acc_date

ip

ip

版块

forum

浏览量

pv

 

    

汇总表

日期

acc_date

浏览量

pv

新用户

newer

独立ip

iip

跳出数

jumper

相关文章
相关标签/搜索