淘宝双11大数据分析(Hive 分析篇-上)
文章目录
- 前言
- 当前环境
- 用聚合函数 count() 计算出表内有多少条数据
- 查出 user_id 不重复的数据的条数
- 查询不重复的数据有多少条(为了排除客户刷单的情况)
- 关键字条件查询分析
- 查询双11那天有多少人购买了商品
- 求当天购买的此品牌商品的数量
- 根据用户行为分析
- 查询一件商品在某天的购买比例或浏览比例
- 查询双11那天,男女买家购买商品的比例
- 给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户id
- 用户实时查询分析
前言
阅读此篇文章,需要先阅读前篇:
- 淘宝双11大数据分析(环境篇)
- 淘宝双11大数据分析(数据准备篇)
当前环境
使用 jps 查看当前启动的服务:(其中 Master 和 Worker是 Spark 的服务,不本篇无关)
[root@centos2020 dataset]# jps
11408 Master
12707 RunJar
7876 NameNode
8183 ResourceManager
7930 DataNode
8477 NodeManager
11550 Worker
12990 Jps
另外,本篇需要先启动 mysql ,hive服务(启动步骤请参考:淘宝双11大数据分析(数据准备篇))。
用聚合函数 count() 计算出表内有多少条数据
hive> select count(*) from user_log;
执行过程和结果(文章篇幅原因,后边的运行只展示结果,不展示过程):
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Query ID = root_20200226001346_be1efc88-10bf-4030-9509-62de994fb0d2
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:set mapreduce.job.reduces=<number>
Starting Job = job_1582623436135_0001, Tracking URL = http://centos2020:8088/proxy/application_1582623436135_0001/
Kill Command = /usr/hadoop/hadoop-2.7.7/bin/hadoop job -kill job_1582623436135_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2020-02-26 00:14:53,555 Stage-1 map = 0%, reduce = 0%
2020-02-26 00:15:16,085 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 3.0 sec
2020-02-26 00:15:39,527 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 6.35 sec
MapReduce Total cumulative CPU time: 6 seconds 350 msec
Ended Job = job_1582623436135_0001
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 6.35 sec HDFS Read: 482200 HDFS Write: 105 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 350 msec
OK
10000
Time taken: 115.187 seconds, Fetched: 1 row(s)
结果是 10000 ,结果正确。因为在上一篇中,给该表中存的数据就是 10000 条。
查出 user_id 不重复的数据的条数
hive> select count(distinct user_id) from user_log;
结果:
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 5.41 sec HDFS Read: 482582 HDFS Write: 103 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 410 msec
OK
358
Time taken: 45.244 seconds, Fetched: 1 row(s)
查询不重复的数据有多少条(为了排除客户刷单的情况)
hive> select count(*) from (select user_id,item_id,cat_id,merchant_id,brand_id,month,day,action from user_log group by user_id,item_id,cat_id,merchant_id,brand_id,month,day,action having count(*)=1)a;
结果:
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 6.93 sec HDFS Read: 485070 HDFS Write: 116 SUCCESS
Stage-Stage-2: Map: 1 Reduce: 1 Cumulative CPU: 4.33 sec HDFS Read: 5058 HDFS Write: 104 SUCCESS
Total MapReduce CPU Time Spent: 11 seconds 260 msec
OK
4754
Time taken: 89.299 seconds, Fetched: 1 row(s)
注意以上的查询语句中,要加上别名 a
否则会报错:
hive> select count(*) from (select user_id,item_id,cat_id,merchant_id,brand_id,month,day,action from user_log group by user_id,item_id,cat_id,merchant_id,brand_id,month,day,action having count(*)=1);
NoViableAltException(256@[])at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.atomjoinSource(HiveParser_FromClauseParser.java:2265)at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.joinSource(HiveParser_FromClauseParser.java:2475)at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.fromSource(HiveParser_FromClauseParser.java:1690)at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.fromClause(HiveParser_FromClauseParser.java:1312)at org.apache.hadoop.hive.ql.parse.HiveParser.fromClause(HiveParser.java:42074)at org.apache.hadoop.hive.ql.parse.HiveParser.atomSelectStatement(HiveParser.java:36735)at org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:36987)at org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:36633)at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:35822)at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:35710)at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2284)at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1333)at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:208)at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:77)at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:70)at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:468)at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1317)at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1457)at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1237)at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1227)at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:821)at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.hadoop.util.RunJar.run(RunJar.java:226)at org.apache.hadoop.util.RunJar.main(RunJar.java:141)
FAILED: ParseException line 1:22 cannot recognize input near '(' 'select' 'user_id' in joinSource
关键字条件查询分析
查询双11那天有多少人购买了商品
hive> select count(distinct user_id) from user_log where action='2';
结果:
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 5.76 sec HDFS Read: 483409 HDFS Write: 103 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 760 msec
OK
358
Time taken: 49.434 seconds, Fetched: 1 row(s)
求当天购买的此品牌商品的数量
hive> select count(*) from user_log where action='2' and brand_id=2661;
结果:
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 6.46 sec HDFS Read: 483258 HDFS Write: 101 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 460 msec
OK
3
Time taken: 52.679 seconds, Fetched: 1 row(s)
根据用户行为分析
查询一件商品在某天的购买比例或浏览比例
先查出有多少用户在这天购买了商品:
即关键字查询中那条语句:
select count(distinct user_id) from user_log where action='2';
其查询结果是 358。
再查出有多少用户点击了该商品:
即查询 user_id 不重复的数据条数:
select count(distinct user_id) from user_log;
其结果是 358。
也就是说比例是 358/358 = 1。
查询双11那天,男女买家购买商品的比例
先查出男性买家买商品的数量:
select count(*) from user_log where gender=1;
结果是:3299
再查出女性买家买商品的数量:
select count(*) from user_log where gender=0;
结果是:3361
因此男女比例是:3299 / 3361 大约等于 0.98
给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户id
查询某一天在该网站购买商品超过5次的用户id:
select user_id from user_log where action='2' group by user_id having count(action='2')>5;
结果(篇幅原因,展示部分结果):
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 6.77 sec HDFS Read: 483294 HDFS Write: 1304 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 770 msec
OK
1321
6058
16464
...
422917
Time taken: 53.104 seconds, Fetched: 65 row(s)
用户实时查询分析
查询不同品牌的购买次数
这次创建新的数据表进行存储:
create table scan(brand_id INT,scan INT) COMMENT 'This is the search of bigdatataobao' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
导入数据:
insert overwrite table scan select brand_id,count(action) from user_log where action='2' group by brand_id;
查看结果:
select * from scan;
结果(篇幅原因,展示部分结果):
OK
NULL 8
60 3
69 1
82 11
99 3
104 1
125 1
127 1
133 1
...
8396 3
8410 1
8461 1
Time taken: 0.852 seconds, Fetched: 544 row(s)
淘宝双11大数据分析(Hive 分析篇-上)相关推荐
- 淘宝双11大数据分析(环境篇)
文章目录 案例分析 前言 数据分析流程 环境准备 软件要求 硬件要求 环境搭建 案例分析 前言 通过本案例,你可以: 熟悉在 Linux 系统中安装 Hadoop 集群.安装 Mysql 数据库,安装 ...
- 淘宝双11大数据分析(数据准备篇)
文章目录 前言 数据内容分析 `user_log.csv`文件内容含义 `train.csv` 和 `test.csv` 文件内容含义 数据上传到Linux系统并解压 数据集的预处理 文件信息截取 导 ...
- 大数据系统开发综合实践(淘宝双11大数据批处理分析系统、NBA 、淘宝购物大数据实时展示、Spark GraphX)
cqupt || xmu--大数据系统开发综合实践 代码放在了GitHub上 链接 task01 大数据批处理系统 淘宝双11大数据批处理分析系统 task02 大数据查询分析计算系统 NBA 统计大 ...
- Spark大数据-基于Hive和Spark的淘宝双11数据分析与预测
基于Hive和Spark的淘宝双11数据分析与预测 1.系统和环境要求(版本仅供参考): Linux: centos7 MySQL: 5.7.16 Hadoop: 2.7.1 Hive: 1.2.1 ...
- 大数据-11-案例演习-淘宝双11数据分析与预测
主要摘自 http://dblab.xmu.edu.cn/post/8116/ 案例简介 Spark课程实验案例:淘宝双11数据分析与预测课程案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数 ...
- 淘宝双11数据分析与预测
淘宝双11数据分析与预测 一. 案例简介 Spark课程实验案例:淘宝双11数据分析与预测课程案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数据教学对实验案例的迫切需求.本案例涉及数据预处理 ...
- 淘宝双11数据分析与预测汇总
国庆假期留在学校做了一下林子雨博士的大数据实验--淘宝双11数据分析与预测,虽然教程写得很详细,但自己还是踩了很多坑,现在记录下来,希望给别人一点帮助. 淘宝双11数据分析与预测实验链接:http:/ ...
- 淘宝双11数据分析与预测--“坑点”汇总
国庆假期留在学校做了一下林子雨博士的大数据实验--淘宝双11数据分析与预测,虽然教程写得很详细,但自己还是踩了很多坑,现在记录下来,希望给别人一点帮助. 淘宝双11数据分析与预测实验连接:点击这里 问 ...
- 淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为代码报错
在练习林子雨老师的"淘宝双11数据分析与预测课程案例-步骤四:利用Spark预测回头客行为"章节时出现了代码报错. 具体在执行"val model = SVMWithSG ...
最新文章
- 有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue
- 如何在Node.js中退出
- haproxy定义规则限制IP访问
- 【Python】Pyecharts数据可视化模块练习
- 分布式与人工智能课程(part6)--第六课
- 哪位科学家奠定了计算机结构理论,计算机等级考试一级理论知识选择题题库(1-50)...
- JavaScript字符串方法——持续补充
- JavaScript之函数实例属性和类属性
- 简明Python docstrings
- 使用DxVcl为Python的飞信库写一个简单的GUI
- 蓝桥02 等差素数列 ——数论知识
- 在1分钟K线图中显示分时图均价线的公式
- 下载B站、秒拍等视频网站视频
- JAVA百度校招笔试题(含答案、解析)
- 有没有发现不会写简历,感觉什么都不会?其实写简历也是一种艺术。
- 云南大理旅游时间推荐
- jsp新代码第45课
- python中 pip不慎卸载了,重新安装方法
- 爆乱媒评——雄性传媒,大与小的技巧——凤凰卫视VS央视评点(1)
- 把数据导出到Excel表格中的方式
热门文章
- 数字化转型,企业需要何种网络架构?
- /lib64 系统库文件出问题,报 ln: error while loading shared libraries: libc.so.6: cannot open shared object
- 第一个cocos2d程序的代码分析
- Ffmpeg + OpenSL ES + Android 播放音频
- python做购物车代码大全-python 字典实现简单购物车
- BRCM5.02编译六:No package 'zlib' found
- 图数据库:从传统关系型数据库说起
- 【Unity Shader】Blend混合
- dell笔记本显卡报错43解决方法
- 中科大少年班,官方公布48名新生名单,有人因偶像曹原,有人只是不想经历高三...