[原]自学大数据:Hive基于搜狗搜索的用户日志行为分析

标签: | 发表时间:2014-08-29 14:58 | 作者:shifenglov
出处:http://blog.csdn.net/shifenglov

前言

”大数据时代“,“大数据/云计算”,“大数据平台”,每天听到太多的大数据相关的词语,好像现在说一句话不跟大数据沾边都不好意思说自己是做IT的。可能这与整个IT圈子的炒作也有关联,某一个方面来看其实就是一营销术语。很多朋友就想问,我想做大数据,但是没有这个条件,没有这个数据量,没有那么多业务场景,没有那多集群可以吗?其实,我觉得是可以的,大数据只是一个华丽的词语,实际的背后也是一些开源框架的支撑,也是通过技术来实现的,所以只要掌握这一套理论体系,开源框架,技术手段,底层实现,就ok。

所以我想写一系列的博客,来让这个看起揭开这个高大上技术的面纱,展露它的本质,让更多的人领略大数据的魅力。

至于怎么搭建hadoop集群,安装生态圈中的hbase、hive、pig、mahout、spark、flume等等,就不在我想讨论的范围内,有太多的的文章、博客都详实的记录了。

这篇我主要想分享,基于搜索引擎的用户日志行为的一些分析,时间比较仓促,如有遗漏或错误欢迎留言,互动,大家进步。


数据来源

打造最权威的中文信息处理数据提供和评测平台 。数据来源, 搜狗实验室


理论知识

          做技术分析之前必须需要相关的理论知识作为研究支撑,所以建议先掌握相应的理论知识。主要分两部分,一个是统计分析相关的,一些关于得出数据总量分量的关系,百分比,进而绘制出趋势走向,历史图标,各种报表等,提供BI的功能。另外一部分是数据挖掘/文本挖掘,挖掘用户查询词的语义,查到相邻词语,进而进行相关搜索推荐等,挖掘出用户兴趣,人群画像等。

          统计分析相关

            搜索引擎用户行为分析

  中文搜索引擎用户日志分析

          数据挖掘/文本挖掘相关 
   大规模中文搜索引擎的用户日志分析
   基于用户日志的查询推荐系统


准备工作

1、下载 搜狗搜索的用户日志 ,有完整版(2GB)和迷你版(87KB),可以先下载迷你版查看数据格式,最终使用完整版做数据分析

        2、建hive表: create table querylog (time string,userid string,keyword string,pagerank int,clickorder int,url string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';


分析过程

       
        1、用户搜索排行榜 >100
        select * from ( select userid,count(*) as c from querylog group by userid having c>1 ) a order by c desc limit 100 ;

        2、url搜索访问排行榜 > 100
       select * from ( select url,count(*) as c from querylog group by url having c>1 ) a order by c desc limit 100 ;

       总共的url的访问次数是 43545444

       可以得到以下结果
           http://www.baidu.com/ 660791    搜索引擎    1.517%
http://www.4399.com/ 231722     小游戏网站  0.532%
http://www.youku.com/ 133650   视频网站   0.306%
http://www.hao123.com/ 129220  导航网站  
http://qzone.qq.com/ 114878    qq空间 sns网站
http://www.7k7k.com/ 98103    小游戏网站
http://cf.qq.com/ 85555    穿越火线网站
      
       发现用户通过搜狗搜索获取百度的地址的数量比较多,其次是游戏类,视频。可以发现有很高的比例的人,其实不是真正的使用搜狗搜索直接搜索数据,而是通过搜狗获得百度搜索,搜索数据。
          
       思考扩展:可以通过对每个网站的分类,比如可以划为视频、搜索、导航、SNS、游戏等网站类型,获得用户最关心的网站类型,什么类型网站最热门,在同一类型网站中热度排行榜,哪个网站最热门,排行榜是怎样的。

       3、用户搜索时,点击url在页面排行pagerank的统计
       select pagerank,count(pagerank) as c from querylog group by pagerank order by pagerank asc;     
      获得用户初次搜索的准确率,比如pagerank比较靠前,说明用户的搜索习惯比较好,或者搜索引擎   的查询命中率较高。
      
          1 18274343  41.966%    第一次搜索的命中率比较高  18274343 / 43545444
2 7926133   18.201%
3 4798577    11.019%
43250306  7.464%
52439101  
61860029
71530145
81285208
91082268
101097680  2.520%
11231  
12205
13193

可以看出来,以每页10条数据的显示,用户通常情况下只查看第一页的数据,占到了绝大多数,最后很少一部分会查看第二页的数据。
查询之后返回结果的第一页的点击率是41.966%,接近一半,说明用户会得到想要的查询的结果,或者更改查询语句


      4、用户访问应用的时间特点
         算出一年时间中,某一个时间段内的 搜索 数量
         比如,查询一年中,所有23点搜索的数量:
         hive -e "INSERT OVERWRITE LOCAL DIRECTORY './time/23' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select count(*) from querylog where time like '________23%';" 
00点
817218

01点
543054

02点
375981

03点
283579

04点
235414

05点
221724

06点
256387

07点
405673

08点
1208389

09点
2032463

10点
2435041

11点
2408354

12点
2405614

13点
2612695

14点
2769876

15点
2870105

16点
2847254

17点
2609760

18点
2614522

19点
3050032
7.004%
20点
3167798
7.274%
21点
2995447

22点
2517636

23点
1861428

      


          分析:
          用一年的平均值给出的结论可以看出,用户在10点-17点为使用高峰期,应该可以看出来是上班时间使用较多。17点到18点为低峰期,可能是用户下班在回家的路上。
          18点到22点为高峰期,特别是20点,达到一天使用的最高峰,应该是用户在家里使用。
          用户基本以上班族为主。

            思考扩展:
           可以考虑出用户的使用习惯是在回家的时候达到最高峰,用户达到最活跃,凌晨时间段用户最少,可以从运营的角度考虑服务器的一些升级部署可以安排到凌晨时段,高峰期在晚上应该可以提高访问速度等。 
           继续搜索以周、月、季度为单位,搜索活跃度同比、环比排行榜

      5、用户查询中包含的中文、英文字数的平均个数
       思路1:userid和keyword作为唯一搜索条件。这样有遗漏,因为有的人隔一段时间可能会搜索同一个语句。
       select count(distinct(keyword)) from querylog ;
      没有重复的查询次数共有 : 25531020
       select sum(length(keyword)) from ( select keyword from querylog group by userid,keyword ) a ;
      用户搜索出来的查询词总共长度是 :189521004
      用户查询语句中包含的中文、英文的平均个数是: 189521004/25531020=7.423个中文、英文或数字
      
      思路2:根据点击顺序为1来判断,说明他第一次点击。如果点击顺序 > 1 说明用户是第二次以上点击了,keyword不是第一次输入。这样也有遗漏,有可能用户只输入了查询词,没有点击网页。
      select count(keyword) from querylog where clickorder=1;
      第一次点击的查询次数共有:30366974
     用户搜索出来的查询词总共长度是:  221004260
     用户查询语句中包含的中文、英文的平均个数是: 221004260/30366974=7.277个中文、英文或数字
     
     6、用户查看结果页面停留的时间有多长
     select * from querylog where unix_timestamp(time,"yyyyMMddhhMMss") < unix_timestamp("20111230003415","yyyyMMddhhMMss") limit 100;
    

扩展  
 
  还可以做更多的数据分析,在此就自己去思考,我点一下思路,比如:
  •     用户的查询类型与数量
  •     查询串中包含的字符类型
  •     查询串中包含的词项个数
  •     结果页面的查询与时间间隔
  •     用户点击url与历史网页


作者:shifenglov 发表于2014/8/29 14:58:06 原文链接
阅读:1363 评论:0 查看评论

相关 [自学 大数据 hive] 推荐:

[原]自学大数据:Hive基于搜狗搜索的用户日志行为分析

- -
”大数据时代“,“大数据/云计算”,“大数据平台”,每天听到太多的大数据相关的词语,好像现在说一句话不跟大数据沾边都不好意思说自己是做IT的. 可能这与整个IT圈子的炒作也有关联,某一个方面来看其实就是一营销术语. 很多朋友就想问,我想做大数据,但是没有这个条件,没有这个数据量,没有那么多业务场景,没有那多集群可以吗.

大数据时代--Hive技术原理解析

- - zzm
Hive的运行原理,帮助使用者更好的了解在使用的过程中它做了些什么工作,深入的理解他的工作机制,提高开发人员理论层面的知识.        Hive是建立在 Hadoop 上的数据仓库基础构架. 它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制.

hive调优

- - 互联网 - ITeye博客
一、    控制hive任务中的map数: . 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);.

hive 优化 tips

- - CSDN博客推荐文章
一、     Hive join优化. 也可以显示声明进行map join:特别适用于小表join大表的时候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key. 2.     注意带表分区的join, 如:.

Hive中的join

- - CSDN博客云计算推荐文章
select a.* from a join b on a.id = b.id select a.* from a join b on (a.id = b.id and a.department = b.department). 在使用join写查询的时候有一个原则:应该将条目少的表或者子查询放在join操作符的左边.

hive优化(2)

- - 开源软件 - ITeye博客
Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具. 使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,. 所以需要去掉原有关系型数据库下开发的一些固有思维. 1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段.

hive优化

- - 开源软件 - ITeye博客
hive.optimize.cp=true:列裁剪. hive.optimize.prunner:分区裁剪. hive.limit.optimize.enable=true:优化LIMIT n语句. hive.limit.optimize.limit.file=10:最大文件数.   1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB).

Hive优化

- - 互联网 - ITeye博客
     使用Hive有一段时间了,目前发现需要进行优化的较多出现在出现join、distinct的情况下,而且一般都是reduce过程较慢.      Reduce过程比较慢的现象又可以分为两类:. 情形一:map已经达到100%,而reduce阶段一直是99%,属于数据倾斜. 情形二:使用了count(distinct)或者group by的操作,现象是reduce有进度但是进度缓慢,31%-32%-34%...一个附带的提示是使用reduce个数很可能是1.

hive bucket 桶

- - CSDN博客推荐文章
对于每一个表(table)或者分区,Hive可以进一步组织成桶. Hive也是针对某一列进行桶的组织. Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中. 采用桶能够带来一些好处,比如JOIN操作. 对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作. 那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量.

hive mapjoin使用

- - 淘剑笑的博客
今天遇到一个hive的问题,如下hive sql:. 该语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错. 为了解决用户的这个问题,考虑使用mapjoin,mapjoin的原理:.