- 基于Spark、Hive等框架的集群式大数据分析流程详述
- 第1章 数据准备
- 1.1 数据文件准备
- 1.2 数据预处理
- 1.3 启动集群环境
- 1.4 导入数据到 Hive 中
- 1.4.1 把目标文件上传到 HDFS 中
- 1.4.2 将数据导入至 Hive 中
- 第2章 Hive 数据分析
- 2.1 使用 Hive 语句进行简单查询分析
- 2.2 使用用户自定义函数对数据进行处理
- 第3章 Spark 数据分析
- 3.1 把目标文件上传到 HDFS 中
- 3.2 在 MySQL 中创建表, 用于存储预测结果
- 3.3 使用 Spark ML 训练数据集生成模型
第1章 数据准备 1.1 数据文件准备注: 本文结构一部分参照于: 淘宝双11大数据分析 , 并深度结合了博主所学的知识,旨在描述一个 集群式大数据分析 流程,类似于一个工具类博客,方面日后进行开发。但这里不会对每个技术进行讲解,下面是一些关于文章内用到的技术的学习专栏:
- Hadoop 生态环境搭建与运行 (环境搭建)
- HDFS 学习笔记
- Scala 学习笔记
- Spark 学习笔记
- Spark SQL 学习笔记
- Hive 学习笔记
- Zookeeper 学习笔记
- Spark ML 学习笔记
- Spark 学习成果转化
- Sqoop的安装、配置与使用
可能用到的一些其他博主的文章:
…
- (1) 下载数据文件
百度云盘链接: 点击前往下载: 提取码: 0819
- (2) 将数据文件上传至 hadoop100 主机 (Linux虚拟机)
首先创建文件夹 /opt/data/, 将数据文件压缩包 data_format.zip 放入其中, 然后将该压缩包解压至 /opt/data/taobao_data 文件夹中,执行命令如下:
[xqzhao@hadoop100 data]$ unzip data_format.zip -d taobao_data/ # 解压成功之后的文件 [xqzhao@hadoop100 taobao_data]$ ll -rw-rw-r--. 1 xqzhao xqzhao 129452503 Mar 2 2017 test.csv -rw-rw-r--. 1 xqzhao xqzhao 129759806 Mar 2 2017 train.csv -rw-rw-r--. 1 xqzhao xqzhao 2598392805 Feb 23 2017 user_log.csv
注: 解压后文件大小约为 2.8G。由于数据文件比较大, 因此解压过程可能需要一定的时间。
1.2 数据预处理
- (1) 去除文件头部信息 (第一行)
通过查看文件前 5 行发现文件第一行是数据信息:
执行下列命令将文件第 1 行删除 (1d 代表第一行):
[xqzhao@hadoop100 taobao_data]$ sed -i '1d' user_log.csv
- (2) 截取文件
执行下述命令查看 user_log.csv 文件一共有多少行:
[xqzhao@hadoop100 taobao_data]$ wc -l user_log.csv 54925331 user_log.csv
可以看到 user_log.csv 文件中一共包含约 5500万 条数据, 这里我们只需要 10万 行即可。
执行下列命令,取文件 user_log.csv 中的前 10万 行数据并放入 user_log_l.csv 文件中:
[xqzhao@hadoop100 taobao_data]$ head -100000 user_log.csv > user_log_l.csv
1.3 启动集群环境
- 在进行下一步操作之前, 需要先启动集群环境, 具体步骤可参考: 基于 Hive 的 SparkSQL 启动流程 (启动 Spark 之前需要启动 Zookeeper)。
- 这里我们使用的是 Spark 的 伪分布式模式。
- 集群启动完成之后,系统中的 进程 应如下图所示:
1.4 导入数据到 Hive 中 1.4.1 把目标文件上传到 HDFS 中
- (1) 执行下列命令在 HDFS 上创建文件夹。
[xqzhao@hadoop100 opt]$ hdfs dfs -mkdir -p /workplace/data/taobao_data/user_log
- (2) 执行下列命令将文件 user_log_l.csv 上传至创建的文件夹中。
[xqzhao@hadoop100 opt]$ hdfs dfs -put /opt/data/taobao_data/user_log_l.csv /workplace/data/taobao_data/user_log
- (3) 通过 HDFS 的图形化界面, 我们可以看到上传的文件 user_log_l.csv。
1.4.2 将数据导入至 Hive 中
- (1) 启动 Hive:
启动 Hive 的操作可以参考: 基于 Hive 的 SparkSQL 启动流程 中第 1.6小节 的描述 (交互式启动)。
- (2) 在 Hive 中创建数据库 dbtaobao:
hive (default)> create database dbtaobao; OK Time taken: 1.567 seconds hive (default)> use dbtaobao; OK Time taken: 0.049 seconds
- (3) 在 dbtaobao 中创建一个外部表 user_log:
create external table user_log( user_id INT, item_id INT, cat_id INT, merchant_id INT, brand_id INT, month STRING, day STRING, action INT, age_range INT, gender INT, province STRING ) row format delimited fields terminated by ',';
各个字段的含义这里不再详述, 可以在另外一位博主的博客: 【淘宝双11大数据分析 (数据准备篇)】 中进行查看。
- (4) 加载 HDFS 文件到 hive (文件在 HDFS)
加载 HDFS 上数据
hive (default)> load data inpath '/workplace/data/taobao_data/user_log/user_log_l.csv' into table user_log;
注: 当然也可以选择直接使用本地上传,而不用先上传至 HDFS, 这样做是为了使流程更标准一些。具体的文件加载方式等知识可以参考: Hive基础—DDL 数据定义—创建表(重要)、修改表、删除表 中第 4.5小节 的描述。
第2章 Hive 数据分析 2.1 使用 Hive 语句进行简单查询分析- (1) 查询 user_log 表中的数据总数
hive (dbtaobao)> select count(*) from user_log; 100000
- (2) 查看 user_log 表中的前 10 条数据
hive (dbtaobao)> select * from user_log limit 10; user_log.user_id user_log.item_id user_log.cat_id user_log.merchant_id user_log.brand_id user_log.month user_log.day user_log.action user_log.age_range user_log.gender user_log.province 328862 323294 833 2882 2661 08 29 0 0 1 内蒙古 328862 844400 1271 2882 2661 08 29 0 1 1 山西 328862 575153 1271 2882 2661 08 29 0 2 1 山西 328862 996875 1271 2882 2661 08 29 0 1 1 内蒙古 328862 1086186 1271 1253 1049 08 29 0 0 2 浙江 328862 623866 1271 2882 2661 08 29 0 0 2 黑龙江 328862 542871 1467 2882 2661 08 29 0 5 2 四川 328862 536347 1095 883 1647 08 29 0 7 1 吉林 328862 364513 1271 2882 2661 08 29 0 1 2 贵州 328862 575153 1271 2882 2661 08 29 0 0 0 陕西
- (3) 查询双11当天订单成交量
hive (dbtaobao)> select count(*) from user_log where action='2' AND month=11 AND day=11; 2552
- (4) 查询购物数量前三的省份
select num, province from ( select count(*) num, province from user_log where action='2' group by province ) t1 order by num desc limit 3; # 注: t1 是必须的,不加 t1 会报错 num province 241 贵州 231 湖北 220 宁夏2.2 使用用户自定义函数对数据进行处理
有兴趣的同学可以参考博主之前写的两个案例:
- (1) 各区域热门商品 Top3: 【点击跳转】, 效果图如下:
- (2) 各职业人群贷款目的Top3: 【点击跳转】, 效果图如下:
上面两个案例查询结果中的 城市备注 与 贷款目的备注 是无法通过简单地连接查询就可以得到的,必须通过 SparkSQL 中提供的 用户自定义函数 来完成。关于 用户自定义函数 (UDAF) 的知识点可以参考: SparkSQL—用户自定义函数—UDF、UDAF 中第 2.7.2小节 中的第 (3) 点的描述。
第3章 Spark 数据分析 3.1 把目标文件上传到 HDFS 中
- (1) 执行下列命令将文件 train.csv 和 test.csv 上传至文件夹 taobao_data 中。
[xqzhao@hadoop100 opt]$ hdfs dfs -put /opt/data/taobao_data/train_l.csv /workplace/data/taobao_data [xqzhao@hadoop100 opt]$ hdfs dfs -put /opt/data/taobao_data/test_l.csv /workplace/data/taobao_data
在文件系统中可以看到上传的文件:
- (1) 首先打开 MySQL 客户端
[xqzhao@hadoop100 module]$ mysql -uroot -p123456 ... mysql>
- (2) 创建 dbtaobao 数据库
mysql> create database dbtaobao; # 选择`dbtaobao` 数据库 mysql> use dbtaobao;
- (3) 创建 rebuy 表
mysql> create table rebuy (score varchar(40),label varchar(40));3.3 使用 Spark ML 训练数据集生成模型



