10分布式数据仓库 HIVE -- HIVE案例实战1 apache common日志分析

来源:互联网 发布:全站仪传输软件 编辑:程序博客网 时间:2024/05/22 06:19

1 日志分析场景

某网站的apache common每天产生一个日志日志文件。将每一天的日志文件,按照日期作为分期,导入HIVE数据仓库。通过hive分析网站用户行为,如:PV,注册数,UV

ip                          时间                                           访问地址                                                                                                访问状态   流量

8.35.201.163 - - [30/May/2013:17:38:21 +0800] "GET /uc_server/data/avatar/000/04/87/94_avatar_middle.jpg HTTP/1.1" 200 5117

 


2 分析网站用户行为的思路

1 PV,网站的总访问量,count(*) from tablename where dt='20141224';

2 UV,独立IP总访问量,select count(distinct ip) from tablename where dt='20141224';

3 注册用户数,分析register.jsp?post from tablename where dt='20141224'。


3 解决方案

3.1 使用shell命令把数据从linux磁盘上传到HDFS中
3.1.1 在hdfs中创建目录,命令如下
    $HADOOP_HOME/bin/hadoop fs -mkdir /hmbbs_logs
3.1.2 写一个shell脚本,叫做upload_to_hdfs.sh,内容大体如下
    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 统计每日的pv,代码如下
      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 INSTR(url,'member.php?mod=register')>0;
   统计每日的独立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 logdate='2013_05_30' GROUP BY ip HAVING times=1) e;
   把每天统计的数据放入一张表
   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 a JOIN 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中 


0 0
原创粉丝点击