`
godlovesdog
  • 浏览: 99974 次
社区版块
存档分类
最新评论

hive日志分析实战(二)

阅读更多

 需求

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

日志格式如下:

 

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)建表

  

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(empty($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;

 

分享到:
评论

相关推荐

    大数据 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