一、运行环境
至此“淘宝双 11 数据分析与预测课程案例”所需要的环境配置完成。另外实际操作中发现在案例教程中存在一些小问题,比如教程中 Eclipse 版本为 3.8,但是在配置 Tomcat Server 时又要求配置 v8.0 版本,然而 3.8 版本的 Eclipse 最多仅支持到 v7.0 版本的 Tomcat,所以实际操作时使用了更新的 Eclipse 版本。
实际配置环境结合了实际情况,没有和实验案例完全一致,不过整个功能正常实现。实际运行环境及版本如下所示。
Linux:
Ubuntu14.04
JDK:
Openjdk-1.7.0_181
Hadoop: 2.7.6
MySQL: 5.7.24
Hive: 1.2.2
Sqoop: 1.4.7
Spark: 2.1.0
Eclipse: 4.5.0
Echarts: 3.8.4
配置过程中截图如下所示,由于步骤较多,仅截取部分关键步骤。
图 1.1 创建 hadoop 用户,添加管理权限
图 1.2 安装配置 SSH
图 1.3 配置 Java
图 1.4 配置 Hadoop
图 1.5 运行 Hadoop
图 1.6 配置运行 MySQL
图 1.7 配置运行 Hive
图 1.8 配置运行 Sqoop
图 1.9 配置运行 Spark
至此“淘宝双 11 数据分析与预测课程案例”所需要的环境配置完成。另外实际操作中发现在案例教程中存在一些小问题,比如教程中 Eclipse 版本为 3.8,但是在配置 Tomcat Server 时又要求配置 v8.0 版本,然而 3.8 版本的 Eclipse 最多仅支持到 v7.0 版本的 Tomcat,所以实际操作时使用了更新的 Eclipse 版本。
二、本地数据集上传到数据仓库 Hive
实验数据集有 3 个文件,分别是用户行为日志文件 user_log.csv、回头客训练集 train.csv、回头客测试集 test.csv,以下是三个文件的数据格式及说明。
表 2.1 user_log 字段定义
回头客训练集 train.csv 和回头客测试集 test.csv,训练集和测试集拥有相同的字段。
表 2.2 user_log 字段定义
2.1 数据集的预处理
2.1.1 删除文件第一行记录(字段名称)
获取数据集并解压,可以看到 dataset 下有三个文件:test.csv、train.csv、user_log.csv。
图 2.1
查看前五条记录
图 2.2
删除第一行的字段名称,并确认是否删除
图 2.3
2.1.2 获取数据集中前 10000 条数据
建立脚本,编辑 predeal.sh 脚本文件
图 2.4
修改执行权限,执行脚本,输出 small_user_log.csv
图 2.5
2.1.3 把 small_user_log.csv 中的数据导入数据仓库 Hive
为此首先把这个文件上传到分布式文件系统 HDFS 中,然后在 Hive 中创建两个个外部表,完成数据导入
启动 Hadoop
- 图 2.6
- 把 user_log.csv 上传到 HDFS 中
- 在 HDFS 根目录下创建子目录
图 2.7
上传文件 small_user_log.csv
图 2.8
查看 HDFS 中的 small_user_log.csv 的前 10 条记录
- 图 2.9
- 在 Hive 上创建数据库
- 启动 MySQL
图 2.10
启动 Hive
图 2.11
这里启动时出现了一个小 bug,提示找不到 spark-assembly 集成包:
图 2.12
这是由于 hive 版本升级到 2.0 以上之后,spark-assembly 集成包被拆成分散的小 jar 包导致的,只需要编辑 bin/hive,将这个 spark-assembly-.jar` 替换成 jars/.jar 即可。
创建数据库 dbtaobao
图 2.13
创建外部表
图 2.14
查询数据
图 2.15
三、Hive 数据分析
3.1 查看 user_log 表
进入 hive shell,通过 show 指令查看表的属性和结构。如图 3.1。
图 3.1
显示结果如图 3.2。
图 3.2
3.2 查询条数及统计分析
3.2.1 计算表内数据行数
通过 select 指令结合 count 指令可以统计记录行数。
图 3.3
3.2.2 查询 uid 不重复的数据条数
图 3.4
3.2.3 查询不重复数据条数
主要为了排除客户刷单情况。
图 3.5
可以看出,排除掉重复信息以后,只有 4754 条记录。
3.2.4 统计男女买家购买商品数量
统计双十一当天男女购买数量,方便后面计算比例。
图 3.6 统计男买家
图 3.7 统计女买家
3.2.5 查询某一天在网站购买该数量商品的用户 id
给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户 id.
通过 group by 和 having 结合,如查询购买商品超过 5 次的用户 id 指令:
selectuser_idfromuser_logwhereaction='2'groupbyuser_idhavingcount(action='2')>5;
查询结果较长,此处不一一列出。
3.3 用户实时查询分析
3.3.1 创建新数据表
创建新的数据表 scan 进行存储,执行结果如图 3.8 所示。
图 3.8
3.3.2 导入统计后的数据
通过 insert 指令导入数据:
hive>insertoverwritetablescanselectbrand_id,count(action)fromuser_logwhereaction='2'groupbybrand_id;
图 3.9
3.3.3 显示统计结果
执行 select 指令:
Hive>select*fromscan;
图 3.10