(十九)hadoop的阶段性项目练习【搜狗搜索日志分析】

一、实战问题

前言:本课程设计数据来源:搜狗五百万数据。

1.数据说明:搜狗五百万数据,是经过处理后的搜狗搜索引擎生产数据,具有真实性,大数据性,能够较好的满足分布式计算应用开发课程设计的数据要求。

2. 搜狗数据的格式:

访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL。

其中,用户ID是根据用户使浏览器访问搜索引擎时的Cookie信息自动赋值,即同一次使用浏览器输入的不同查询对应一个用户ID。

操作要求:

1.将原始数据加载到HDFS平台。 
2.将原始数据中的时间字段拆分并拼接,添加年、月、日、小时字段。 
3.将处理后的数据加载到HDFS平台。 
4.以下操作分别通过MR和Hive实现。

  • 查询总条数
  • 非空查询条数
  • 无重复总条数
  • 独立UID总数
  • 查询频度排名(频度最高的前50词)
  • 查询次数大于2次的用户总数
  • 查询次数大于2次的用户占比
  • Rank在10以内的点击次数占比
  • 直接输入URL查询的比例
  • 查询搜索过”仙剑奇侠传“的uid,并且次数大于3

5.将4每步骤生成的结果保存到HDFS中。 
6.将5生成的文件通过Java API方式导入到HBase(一张表)。 
7.通过HBase shell命令查询6导出的结果。

部分数据:

二、Hive的实战操作

首先对源数据进行处理

1.将原始数据加载到HDFS平台。

hadoop fs -put sogou.500w.utf8 /

通过xftp将文件传入Linux中

集群web界面中的文件

2.将原始数据中的时间字段拆分并拼接,添加年、月、日、小时字段。

使用vim编写脚本sogou-log-extend.sh,其中sogou-log-extend.sh文件的内容为:

#!/bin/bash
#infile=/root/sogou.500w.utf8
infile=$1
#outfile=/root/filesogou.500w.utf8.ext
outfile=$2
awk -F '\t' '{print $0"\t"substr($1,0,5)"year\t"substr($1,5,2)"month\t"substr($1,7,2)"day\t"substr($1,8,2)"hour"}' $infile > $outfile

使用脚本处理文件

bash sogou-log-extend.sh sogou.500w.utf8 sogou.500w.utf8.ext

3.处理后的数据上传到HDFS。

hadoop fs -put sogou.500w.utf8.ext /

 

Hive分析数据

1.打开 Hive 客户端:

使用Hive命令

2.将数据导入到hive仓库中:

  1. 查看数据库:show databases;
  2. 创建数据库: create database sogou;
  3. 使用数据库: use sogou;
  4. 查看所有表:show tables;
  5. 创建sougou表:Create table sogou(time string,uuid string,name string,num1 int,num2 int,url string) Row format delimited fields terminated by '\t';
  6. 将本地数据导入到Hive表里:Load data local inpath '/root/sogou.500w.utf8' into table sogou;
  7. 查看表信息:desc sogou; 

 

3.查询总条数

select count(*) from sogou;

4.非空查询条数

select count(*) from sogou where name is not null and name !=”;

 

5.无重复总条数

select count(*) from (select * from sogou group by time,num1,num2,uuid,name,url having count(*)=1) a;

使用hive -S可以进入静默模式

6.独立UID总数

select count(distinct uuid) from sogou;

7.查询频度排名(频度最高的前50词)

select name,count(*) as pd from sogou group by name order by pd desc limit 50;

8.查询次数大于2次的用户总数

select count(a.uuid) from (select uuid,count(*) as cnt from sogou group by uuid having cnt > 2) a;

9.查询次数大于2次的用户占比

select count(*) from (select uuid,count(*) as cnt from sogou group by uuid having cnt > 2) a;

10.Rank在10以内的点击次数占比

select count(*) from sogou where num1<11;

11.直接输入URL查询的比例

select count(*) from sogou where url like ‘%www%’;

12.查询搜索过”仙剑奇侠传“的uid,并且次数大于3

select uuid,count(*) as uu from sogou where name=’仙剑奇侠传’ group by uuid having uu>3;

保存结果到HDFS

使用INSERT OVERWRITE DIRECTORY可完成操作

例如:将查询搜索过”仙剑奇侠传“的uid,并且次数大于3的结果保存到HDFS

insert overwrite directory "/user/out/"
row format delimited fields terminated by "\t" 
select uuid,count(*) as uu from sogou where name='仙剑奇侠传' 
group by uuid having uu>3;

在HDFS的user/out中可以看到保存结果的文件

HDFS中的结果

 

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值