栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

☀️☀️基于Spark、Hive等框架的集群式大数据分析流程详述—淘宝双11大数据分析

☀️☀️基于Spark、Hive等框架的集群式大数据分析流程详述—淘宝双11大数据分析

本文目录如下:
  • 基于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 训练数据集生成模型

基于Spark、Hive等框架的集群式大数据分析流程详述

注: 本文结构一部分参照于: 淘宝双11大数据分析 , 并深度结合了博主所学的知识,旨在描述一个 集群式大数据分析 流程,类似于一个工具类博客,方面日后进行开发。但这里不会对每个技术进行讲解,下面是一些关于文章内用到的技术的学习专栏:

  • Hadoop 生态环境搭建与运行 (环境搭建)
  • HDFS 学习笔记
  • Scala 学习笔记
  • Spark 学习笔记
  • Spark SQL 学习笔记
  • Hive 学习笔记
  • Zookeeper 学习笔记
  • Spark ML 学习笔记
  • Spark 学习成果转化
  • Sqoop的安装、配置与使用

可能用到的一些其他博主的文章:

第1章 数据准备 1.1 数据文件准备
  • (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

在文件系统中可以看到上传的文件:

3.2 在 MySQL 中创建表, 用于存储预测结果
  • (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 训练数据集生成模型
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号