需求
统计某游戏平台新用户渠道来源
日志格式如下:
- 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)建表
- 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文件夹)
- echo "==== load data into tmp table $TMP_TABLE ==="
- ${SOFTWARE_BASE}/hive/bin/hive -e "create external table $TMP_TABLE (info string) location '${TMP_DIR}';"
- echo "==== M/R ==="
- CURR_YEAR=`echo $CURR_DOING|cut -b 1-4`
- CURR_MONTH=`echo $CURR_DOING|cut -b 5-6`
- CURR_DAY=`echo $CURR_DOING|cut -b 7-8`
- dt="${CURR_YEAR}-${CURR_MONTH}-${CURR_DAY}"
- ${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:
- $fr=fopen("php://stdin","r");
- $month_dict = array(
- 'Jan' => 1,
- 'Feb' => 2,
- 'Mar' => 3,
- 'Apr' => 4,
- 'May' => 5,
- 'Jun' => 6,
- 'Jul' => 7,
- 'Aug' => 8,
- 'Sep' => 9,
- 'Oct' => 10,
- 'Nov' => 11,
- 'Dec' => 12,
- );
- while(!feof($fr))
- {
- $input = fgets($fr,256);
- $input = rtrim($input);
- //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}
- if(preg_match("/([^ ]+) +(\d+) (\d+):.*\{SPR\}([^\{]*)\{SPR\}(\d+)\{SPR\}(\d+)\{SPR\}([^\{]*)\{SPR\}([^\{]*)\{SPR\}(([^\{]*)\{SPR\}([^\{]*)\{SPR\})?/",$input,$matches))
- {
- $year = substr($matches[5],0,4);
- 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";
- }
- }
- fclose ($fr);
2.找出新用户
1)用户登陆平台记录按月消重汇总
- create table distinct_login_monthly_tmp_07 as select qid,year,month from glogin_daily group by qid,year,month;
2)用户登陆平台月数
- 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
- 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:
- add file /home/game/lvbenwei/load_login/get_player_src.php;
- 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:
- $fr=fopen("php://stdin","r");
- $curr_qid = null;
- $curr_src = null;
- $curr_logintime=null;
- while(!feof($fr))
- {
- $input = fgets($fr,1024);
- $input = rtrim($input);
- $arr = explode("\t", $input);
- $qid = trim($arr[0]);
- if(emptyempty($curr_qid)||$curr_qid != $qid)
- {
- $curr_qid = $qid;
- echo $input."\n";
- }
- }
- fclose ($fr);
平台级新用户数:
- select count(*) from new_player_src_07;
平台级各渠道新用户汇总:
- 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是一个极其重要的工具,它被广泛应用于大数据分析和数据仓库操作。本实战数据集主要涉及两个核心部分:`video`数据和`user`数据,这些都是构建大数据分析模型的基础元素。让我们深入探讨一下...
44.复杂日志分析-指标结果的分析实现 45.Hive中数据文件的存储格式介绍及对比 46.常见的压缩格式及MapReduce的压缩介绍 47.Hadoop中编译配置Snappy压缩 48.Hadoop及Hive配置支持snappy压缩 49.Hive中的常见调优 50....
基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量...
读者可以使用Hive来处理和分析大量数据,包括日志数据、社交媒体数据和 IoT 数据等。同时,读者还可以使用Hive来实现数据挖掘、数据预处理和数据可视化等功能。 实践操作的重要性 实践操作是学习Hive和大数据分析...
基于Hadoop网站流量日志数据分析系统项目源码+教程.zip网站流量日志数据分析系统 典型的离线流数据分析系统 技术分析 hadoop nginx flume hive sqoop mysql springboot+mybatisplus+vcharts 基于Hadoop网站流量日志...
在HIVE实战测试中,数据通常来自各种来源,如日志文件、交易记录、社交媒体数据等。这些数据经过预处理后,被转化为Hive可识别的格式,如CSV或JSON,然后上传到HDFS(Hadoop分布式文件系统)中。测试数据的选择至关...
项目实践包括从安装CentOS开始,学习如何进行基本配置,到搭建和配置Hadoop、Spark、Kafka、Flume和Hive等大数据处理工具,直至实现一个完整的日志分析项目。 Hadoop是一个开源的分布式存储和计算框架,能够处理PB...
Hive 主要适用于离线分析,适合处理大量静态数据,如日志分析、用户行为分析、广告效果评估等。由于 Hive 的数据处理是批处理模式,不适合实时或低延迟查询。 【Hive 安装部署】 安装 Hive 包括准备 Hadoop 环境、...
例如,广告定向、用户行为分析、日志分析等业务都可以利用Hive进行大数据处理。 Hive的安装部署涉及配置Hadoop环境、安装Hive及其依赖(如Hadoop、Metastore Server、JDBC驱动等),然后设置环境变量和配置文件,...
在实际项目中,"Hive实战项目数据文件"通常包含了各种类型的数据集,这些数据可能来自于日志、传感器、用户行为等。数据文件可能以CSV、JSON或其他格式存储,Hive可以通过加载这些文件来建立表。在使用Hive时,我们...
调优工作完成后,还需要进行定位调优指导,通过搜集HiveServer和MapReduce日志来诊断性能问题。定位调优思路和常见问题处理也是非常关键的部分,比如处理OOM问题,这要求开发者不仅了解调优方法,还要掌握一定的故障...
《Spark大数据分析与实战》课程是一门深入探讨Apache Spark在大数据处理领域的应用和技术的课程,其课后练习答案集提供了对课程所讲授知识的巩固和实践。这是一份珍贵的配套教学资源,旨在帮助学生更好地理解和掌握...
3. **Hive日志系统实战.pdf**: 这份PDF可能详细讲解了Hive的日志管理和分析,这对于调试和性能优化至关重要。日志可以提供查询执行的详细信息,帮助我们理解查询执行的瓶颈和优化策略。用户可能会学习到如何配置和...
同时,也会介绍错误排查和日志分析,帮助读者解决Hive使用过程中可能遇到的问题。 总的来说,《Hive编程手册,从入门到精通》是一本全方位的Hive学习资源,涵盖了理论知识、实战技能和优化策略,无论你是初入大数据...
通过Spark SQL可以方便地对用户行为日志进行分析,提取出活跃度相关的特征,进而构建用户活跃度评分。 项目中的"code_resource_010"可能包含了Spark和Hive的代码示例,涵盖了数据读取、预处理、特征工程、模型训练...
这个压缩包文件"hive案列-游戏登陆信息分析.rar_hive.rar"显然是一个关于使用Hive进行游戏登录信息分析的实战案例,非常适合初学者进行学习和实践。下面我们将深入探讨Hive的相关知识,并结合游戏登录信息分析的场景...