`
wbj0110
  • 浏览: 1602998 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

hive日志分析实战(二)

    博客分类:
  • Hive
阅读更多

需求

统计某游戏平台新用户渠道来源

日志格式如下:

 

Text代码  收藏代码
  1. Jul 23 0:00:47  [info] {SPR}gjzq{SPR}20130723000047{SPR}85493108{SPR}S1{SPR}{SPR}360wan-2j-reg{SPR}58.240.209.78{SPR}  

 

 分析

问题的关键在于先找出新用户

新用户:仅在7月份登陆过平台的用户为新用户

依据map/reduce思想,可以按照如下方式找出新用户:

  • 假如某用户在某月份出现过,则(qid,year,month)=1
  • 按qid汇总该用户出现过的月数,即构建(qid,count(year,month))对
  • 新用户的count(year,month)=1,且(year,month)=(2013,07).

找出新用户的来源渠道

来源渠道:新用户在201307可能多次登录平台,需要找出最早登陆平台所属渠道

分两步来做:

  • 找出新用户所有登陆记录(qid,logintime,src)
  • 针对同一qid找出logintime最小时的src

实现

  1. 数据准备

    1)建表

  

Sql代码  收藏代码
  1. create table if not exists glogin_daily (year int,month int,day int,hour int,logintime string,qid int,gkey string,skey string,loginip string,registsrc string,loginfrom string) partitioned by (dt string);  

     依据日志内容及所关心的信息创建表格,按天组织分区

   2 ) 数据导入

    因日志文件存在于多处,我们先将日志汇总到一临时目录,创建临时外部表将数据加载进hive,然后通过正则匹配的方式分隔出各字段。(内部表只能load单文件,通过这种方式可以load文件夹)

   

Shell代码  收藏代码
  1. echo "==== load data into tmp table $TMP_TABLE ==="  
  2.     ${SOFTWARE_BASE}/hive/bin/hive -e "create external table $TMP_TABLE (info string) location '${TMP_DIR}';"  
  3.     echo "==== M/R ==="  
  4.     CURR_YEAR=`echo $CURR_DOING|cut -b 1-4`  
  5.     CURR_MONTH=`echo $CURR_DOING|cut -b 5-6`  
  6.     CURR_DAY=`echo $CURR_DOING|cut -b 7-8`  
  7.     dt="${CURR_YEAR}-${CURR_MONTH}-${CURR_DAY}"  
  8.     ${SOFTWARE_BASE}/hive/bin/hive -e "add file ${SCRIPT_PATH}/${MAP_SCRIPT_FILE};set hive.exec.dynamic.partition=true;insert overwrite table glogin_daily partition (dt='${dt}') select transform (t.i) using '$MAP_SCRIPT_PARSER ./${MAP_SCRIPT_FILE}' as (y,m,d,h,t,q,g,s,ip,src,f) from (select info as i from ${TMP_TABLE}) t;"  

  

其中filter_login.php:

Php代码  收藏代码
  1. $fr=fopen("php://stdin","r");  
  2. $month_dict = array(  
  3.     'Jan' => 1,  
  4.     'Feb' => 2,  
  5.     'Mar' => 3,  
  6.     'Apr' => 4,  
  7.     'May' => 5,  
  8.     'Jun' => 6,  
  9.     'Jul' => 7,  
  10.     'Aug' => 8,  
  11.     'Sep' => 9,  
  12.     'Oct' => 10,  
  13.     'Nov' => 11,  
  14.     'Dec' => 12,  
  15. );  
  16. while(!feof($fr))  
  17. {  
  18.     $input = fgets($fr,256);  
  19.     $input = rtrim($input);  
  20.     //Jul 23 0:00:00  [info] {SPR}xxj{SPR}20130723000000{SPR}245396389{SPR}S9{SPR}iwan-ng-mnsg{SPR}cl-reg-xxj0if{SPR}221.5.67.136{SPR}  
  21.     if(preg_match("/([^ ]+) +(\d+) (\d+):.*\{SPR\}([^\{]*)\{SPR\}(\d+)\{SPR\}(\d+)\{SPR\}([^\{]*)\{SPR\}([^\{]*)\{SPR\}(([^\{]*)\{SPR\}([^\{]*)\{SPR\})?/",$input,$matches))  
  22.     {  
  23.        $year = substr($matches[5],0,4);  
  24.        echo $year."\t".$month_dict[$matches[1]]."\t".$matches[2]."\t".$matches[3]."\t".$matches[5]."\t".$matches[6]."\t".$matches[4]."\t".$matches[7]."\t".$matches[11]."\t".$matches[8]."\t".$matches[10]."\n";  
  25.     }  
  26. }  
  27. fclose ($fr);  

 

2.找出新用户

 

1)用户登陆平台记录按月消重汇总

 

Sql代码  收藏代码
  1. create table distinct_login_monthly_tmp_07 as select qid,year,month from glogin_daily group by qid,year,month;  

 
2)用户登陆平台月数

 

Sql代码  收藏代码
  1. create table login_stat_monthly_tmp_07 as select qid,count(1) as c from distinct_login_monthly_tmp_07 where year<2013 or (year=2013 and month<=7) group by qid;   

 
平台级新用户:
1)找出登陆月数为1的用户;

2.判断这些用户是否在7月份出现,如果有出现,找出登陆所有src

 

Sql代码  收藏代码
  1. create table new_player_monthly_07 as select distinct a.qid,b.src,b.logintime from (select qid from login_stat_monthly_tmp_07 where c=1) a join (select qid,loginfrom as src,logintime from glogin_daily where month=7 and year=2013) b on a.qid=b.qid;  

 
找出最早登陆的src:

 

Sql代码  收藏代码
  1. add file /home/game/lvbenwei/load_login/get_player_src.php;  
  2. create table new_player_src_07 as select transform (t.qid,t.src,t.logintime) using 'php ./get_player_src.php' as (qid,src,logintime) from (select * from new_player_monthly_07 order by qid,logintime) t;  

 

其中get_player_src.php:

Php代码  收藏代码
  1. $fr=fopen("php://stdin","r");  
  2. $curr_qid = null;  
  3. $curr_src = null;  
  4. $curr_logintime=null;  
  5. while(!feof($fr))  
  6. {  
  7.     $input = fgets($fr,1024);  
  8.     $input = rtrim($input);  
  9.     $arr   = explode("\t"$input);  
  10.     $qid   = trim($arr[0]);  
  11.         if(emptyempty($curr_qid)||$curr_qid != $qid)  
  12.         {  
  13.                 $curr_qid = $qid;  
  14.                 echo $input."\n";  
  15.         }  
  16. }  
  17. fclose ($fr);  

 
平台级新用户数:

Sql代码  收藏代码
  1. select count(*) from new_player_src_07;  

 
平台级各渠道新用户汇总:

Sql代码  收藏代码
  1. create table new_player_src_stat_07 as select src,count(*) from new_player_monthly_07 group by src;  

http://godlovesdog.iteye.com/blog/1926259

 
分享到:
评论

相关推荐

    大数据 hive 实战数据

    在大数据处理领域,Hive是一个极其重要的工具,它被广泛应用于大数据分析和数据仓库操作。本实战数据集主要涉及两个核心部分:`video`数据和`user`数据,这些都是构建大数据分析模型的基础元素。让我们深入探讨一下...

    【63课时完整版】大数据实践HIVE详解及实战

    44.复杂日志分析-指标结果的分析实现 45.Hive中数据文件的存储格式介绍及对比 46.常见的压缩格式及MapReduce的压缩介绍 47.Hadoop中编译配置Snappy压缩 48.Hadoop及Hive配置支持snappy压缩 49.Hive中的常见调优 50....

    基于Hadoop网站流量日志数据分析系统.zip

    基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量...

    Hive入门与大数据分析实战.pptx

    读者可以使用Hive来处理和分析大量数据,包括日志数据、社交媒体数据和 IoT 数据等。同时,读者还可以使用Hive来实现数据挖掘、数据预处理和数据可视化等功能。 实践操作的重要性 实践操作是学习Hive和大数据分析...

    基于Hadoop的网站流量日志数据分析系统项目源码+教程.zip

    基于Hadoop网站流量日志数据分析系统项目源码+教程.zip网站流量日志数据分析系统 典型的离线流数据分析系统 技术分析 hadoop nginx flume hive sqoop mysql springboot+mybatisplus+vcharts 基于Hadoop网站流量日志...

    HIVE实战测试数据,HIVE实战测试数据

    在HIVE实战测试中,数据通常来自各种来源,如日志文件、交易记录、社交媒体数据等。这些数据经过预处理后,被转化为Hive可识别的格式,如CSV或JSON,然后上传到HDFS(Hadoop分布式文件系统)中。测试数据的选择至关...

    大数据日志分析实战

    项目实践包括从安装CentOS开始,学习如何进行基本配置,到搭建和配置Hadoop、Spark、Kafka、Flume和Hive等大数据处理工具,直至实现一个完整的日志分析项目。 Hadoop是一个开源的分布式存储和计算框架,能够处理PB...

    大数据系列Hive入门与实战.pptx

    Hive 主要适用于离线分析,适合处理大量静态数据,如日志分析、用户行为分析、广告效果评估等。由于 Hive 的数据处理是批处理模式,不适合实时或低延迟查询。 【Hive 安装部署】 安装 Hive 包括准备 Hadoop 环境、...

    大数据系列-Hive入门与实战.pptx

    例如,广告定向、用户行为分析、日志分析等业务都可以利用Hive进行大数据处理。 Hive的安装部署涉及配置Hadoop环境、安装Hive及其依赖(如Hadoop、Metastore Server、JDBC驱动等),然后设置环境变量和配置文件,...

    Hive实战项目数据文件和Zeppelin源文件

    在实际项目中,"Hive实战项目数据文件"通常包含了各种类型的数据集,这些数据可能来自于日志、传感器、用户行为等。数据文件可能以CSV、JSON或其他格式存储,Hive可以通过加载这些文件来建立表。在使用Hive时,我们...

    hive性能调优

    调优工作完成后,还需要进行定位调优指导,通过搜集HiveServer和MapReduce日志来诊断性能问题。定位调优思路和常见问题处理也是非常关键的部分,比如处理OOM问题,这要求开发者不仅了解调优方法,还要掌握一定的故障...

    Spark大数据分析与实战课后练习答案.rar

    《Spark大数据分析与实战》课程是一门深入探讨Apache Spark在大数据处理领域的应用和技术的课程,其课后练习答案集提供了对课程所讲授知识的巩固和实践。这是一份珍贵的配套教学资源,旨在帮助学生更好地理解和掌握...

    hive学习资料.zip

    3. **Hive日志系统实战.pdf**: 这份PDF可能详细讲解了Hive的日志管理和分析,这对于调试和性能优化至关重要。日志可以提供查询执行的详细信息,帮助我们理解查询执行的瓶颈和优化策略。用户可能会学习到如何配置和...

    hive编程手册,从入门到精通

    同时,也会介绍错误排查和日志分析,帮助读者解决Hive使用过程中可能遇到的问题。 总的来说,《Hive编程手册,从入门到精通》是一本全方位的Hive学习资源,涵盖了理论知识、实战技能和优化策略,无论你是初入大数据...

    基于Spark+Hive实现用户画像分析系统(含价值度、忠诚度、流失预警、活跃度等分析模型).zip

    通过Spark SQL可以方便地对用户行为日志进行分析,提取出活跃度相关的特征,进而构建用户活跃度评分。 项目中的"code_resource_010"可能包含了Spark和Hive的代码示例,涵盖了数据读取、预处理、特征工程、模型训练...

    hive案列-游戏登陆信息分析.rar_hive.rar

    这个压缩包文件"hive案列-游戏登陆信息分析.rar_hive.rar"显然是一个关于使用Hive进行游戏登录信息分析的实战案例,非常适合初学者进行学习和实践。下面我们将深入探讨Hive的相关知识,并结合游戏登录信息分析的场景...

Global site tag (gtag.js) - Google Analytics