数据仓库【5】:项目实战

news2024/11/20 13:36:43

数据仓库【5】:项目实战

  • 1、项目概述
    • 1.1、项目背景
    • 1.2、复购率计算
  • 2、数据描述
  • 3、架构设计
    • 3.1、数据仓库架构图
  • 4、环境搭建
    • 4.1、环境说明
    • 4.2、集群规划
    • 4.3、搭建流程
  • 5、项目开发
    • 5.1、业务数据生成
    • 5.2、ETL数据导入
    • 5.3、ODS层创建&数据接入
    • 5.4、DWD层创建&数据接入
    • 5.5、DWS层创建&数据接入
    • 5.6、ADS层创建&数据接入
    • 5.7、ADS层数据导出
    • 5.8、Azkaban自动化调度
  • 6、课后练习
    • 6.1、ADS层分析
    • 6.2、ADS层创建&数据接入
    • 6.3、Azkaban自动化调度

1、项目概述

1.1、项目背景

  • 某电商企业,因数据积存、分析需要,筹划搭建数据仓库,提供数据分析访问接口
  • 项目一期需要完成数仓建设,并完成用户复购率的分析计算,支持业务查询需求

1.2、复购率计算

  • 复购率是指在一段时间间隔内,多次重复购买产品的用户,占全部人数的比率
  • 统计各个一级品类下,品牌月单次复购率,和多次复购率
    在这里插入图片描述

2、数据描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、架构设计

3.1、数据仓库架构图

在这里插入图片描述

4、环境搭建

4.1、环境说明

  • 操作系统及组件版本
CentosHadoopHiveTezMysqlSqoopAzkabanPresto
版本72.7.71.2.10.9.15.7.281.4.62.5.00.196

4.2、集群规划

  • 使用3台虚拟机进行搭建
HadoopHive&TezMysqlSqoopAzkabanPresto
node01
node02
node03

4.3、搭建流程

1、安装并准备3台CentOS7.2虚拟机,主机名命名为node01、node02、node03
2、上传自动化安装脚本automaticDeploy.zip到虚拟机node01中
3、解压automaticDeploy.zip到/home/hadoop/目录下

unzip automaticDeploy.zip -d /home/hadoop/

4、更改frames.txt文件,配置组件的安装节点信息

# 通用环境
jdk-8u144-linux-x64.tar.gz true
azkaban-sql-script-2.5.0.tar.gz true
# Node01
hadoop-2.7.7.tar.gz true node01
# Node02
mysql-rpm-pack-5.7.28 true node02
azkaban-executor-server-2.5.0.tar.gz true node02
azkaban-web-server-2.5.0.tar.gz true node02
presto-server-0.196.tar.gz true node02
# Node03
apache-hive-1.2.1-bin.tar.gz true node03
apache-tez-0.9.1-bin.tar.gz true node03
sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz true node03
yanagishima-18.0.zip true node03
# Muti
apache-flume-1.7.0-bin.tar.gz true node01,node02,node03
zookeeper-3.4.10.tar.gz true node01,node02,node03
kafka_2.11-0.11.0.2.tgz true node01,node02,node03

5、编辑configs.txt文件,配置mysql、keystore密码信息

# Mysql相关配置
mysql-root-password DBa2020* END
mysql-hive-password DBa2020* END
mysql-drive mysql-connector-java-5.1.26-bin.jar END
# azkaban相关配置
azkaban-mysql-user root END
azkaban-mysql-password DBa2020* END
azkaban-keystore-password 123456 END

6、编辑host_ip.txt文件,添加3个虚拟机节点信息

192.168.0.200 node01 root 123456
192.168.0.201 node02 root 123456
192.168.0.202 node03 root 123456

7、对/home/hadoop/automaticDeploy/下的hadoop、systems所有脚本添加执行权限

chmod +x /home/hadoop/automaticDeploy/hadoop/* /home/hadoop/automaticDeploy/systems/*

8、执行systems/batchOperate.sh脚本,完成环境初始化

/home/hadoop/automaticDeploy/systems/batchOperate.sh

9、根据安装需要,执行hadoop目录下对应的组件安装脚本

/home/hadoop/automaticDeploy/hadoop/installHadoop.sh

10、将自动化脚本分发到其他两个节点,并分别执行batchOperate.sh和组件安装脚本

scp -r automaticDeploy root@192.168.0.201:/home/hadoop/
scp -r automaticDeploy root@192.168.0.202:/home/hadoop/

11、在所有虚拟机节点source环境变量文件

source /etc/profile

12、启动hadoop环境,并检查是否启动成功

hadoop namenode -format
start-all.sh

5、项目开发

整体开发流程
1、业务数据生成
2、ETL数据导入
3、创建ODS层,并完成HDFS数据接入
4、创建DWD层,并完成ODS层数据导入
5、创建DWS层,导入DWD层数据
6、创建ADS层,完成复购率计算
7、编写脚本,将ADS层的数据导出到Mysql中,供业务查询
8、使用Azkaban调度器,实现脚本自动化运行
在这里插入图片描述

5.1、业务数据生成

  • 进入Mysql,创建数据库Mall
export MYSQL_PWD=DBa2020*
mysql -uroot -e "create database mall;"
  • 上传数据生成sql脚本到Mysql安装节点
  • 使用命令方式,将数据生成sql脚本导入到Mysql中
mysql -uroot mall < {pathToSQL}
  • 进入Mysql,生成数据
use mall;
#生成日期2020-06-10日数据、订单300个、用户200个、商品sku300个、不删除数据
CALL init_data('2020-06-10',300,200,300,FALSE);

5.2、ETL数据导入

  • 进入Sqoop安装节点,创建/home/warehouse/shell目录
mkdir –p /home/warehouse/shell
  • 编写Sqoop数据导入脚本,脚本内容见材料
cd /home/warehouse/shell
vim sqoop_import.sh
  • 赋予脚本执行权限,并运行脚本
chmod +x /home/warehouse/shell/sqoop_import.sh
./sqoop_import.sh all 2020-06-10
  • 通过Web界面查看HDFS的/origin_data/mall/db/目录下是否存在导入数据

5.3、ODS层创建&数据接入

  • 进入Hive安装节点,启动Hive元数据服务
hive --service hiveserver2 &
hive --service metastore &
  • 在/home/warehouse/sql目录下编写ods_ddl.sql,创建与业务数据库一致的数据表
vim /home/warehouse/sql/ods_ddl.sql
  • 将ods_ddl.sql导入到Hive中
hive -f /home/warehouse/sql/ods_ddl.sql
  • 在/home/warehouse/shell/目录下编写ods_db.sh脚本,完成数据导入操作
vim /home/warehouse/shell/ods_db.sh
  • 为脚本赋权,并执行
chmod +x /home/shell/warehouse/ods_db.sh
ods_db.sh 2020-06-10

5.4、DWD层创建&数据接入

DWD层分析

  • 对ODS层数据进行清洗、维度退化
  • 因业务库数据质量高,所以只需要去空数据即可
  • 分类表可以进行维度退化,维度合并到商品表中
    在这里插入图片描述
  • 在/home/warehouse/sql目录下编写dwd_ddl.sql,创建DWD层数据表
vim /home/warehouse/sql/dwd_ddl.sql
  • 将dwd_ddl.sql导入到Hive中
hive -f /home/warehouse/sql/dwd_ddl.sql
  • 在/home/warehouse/shell目录下编写dwd_db.sh脚本,完成数据导入操作
vim /home/warehouse/shell/dwd_db.sh
  • 为脚本赋权,并执行
chmod +x /home/warehouse/shell/dwd_db.sh
./dwd_db.sh 2020-06-10
  • 查看是否执行成功
select * from dwd_sku_info where dt='2020-06-10' limit 2;

5.5、DWS层创建&数据接入

DWS层分析

  • 将具有相同分析主题的DWD层数据,聚合成宽表模型,便于数据分析与计算
  • 主题的归纳具有通用性,后续也可能会随着分析业务的增加而扩展
    在这里插入图片描述
  • 在/home/warehouse/sql目录下编写dws_ddl.sql,创建DWS层数据表
vim /home/warehouse/sql/dws_ddl.sql
  • 将dws_ddl.sql导入到Hive中
hive -f /home/warehouse/sql/dws_ddl.sql
  • 在/home/warehouse/shell目录下编写dws_db.sh脚本,完成数据导入操作
vim /home/warehouse/shell/dws_db.sh
  • 为脚本赋权,并执行
chmod +x /home/warehouse/shell/dws_db.sh
./dws_db.sh 2020-06-10
  • 查看是否执行成功

select * from dws_user_action where dt='2020-06-10' limit 2;
select * from dws_sale_detail_daycount where dt='2020-06-10' limit 2;

5.6、ADS层创建&数据接入

ADS层分析

  • 统计各个一级品类下,品牌月单次复购率,和多次复购率
    在这里插入图片描述
  • 在/home/warehouse/sql目录下编写ads_sale_ddl.sql,创建DWS层数据表
vim /home/warehouse/sql/ads_sale_ddl.sql
  • 将ads_sale_ddl.sql导入到Hive中
hive -f /home/warehouse/sql/ads_sale_ddl.sql
  • 在/home/warehouse/shell目录下编写ads_sale.sh脚本,完成数据导入操作
vim /home/warehouse/shell/ads_sale.sh
  • 为脚本赋权,并执行
chmod +x /home/warehouse/shell/ads_sale.sh
/home/warehouse/shell/ads_sale.sh 2020-06-10
  • 查看是否执行成功
select * from ads_sale_tm_category1_stat_mn limit 2;

5.7、ADS层数据导出

  • 在Mysql节点的/home/warehouse/sql目录下编写mysql_sale_ddl.sql,创建数据表
vim /home/warehouse/sql/mysql_sale_ddl.sql
  • 将mysql_sale_ddl.sql导入到Mysql中
export MYSQL_PWD=DBa2020*
mysql -uroot mall < /home/warehouse/sql/mysql_sale_ddl.sql
  • 在Sqoop节点的/home/warehouse/shell目录下编写sqoop导出脚本,完成数据导入操作
vim /home/warehouse/shell/sqoop_export.sh
  • 为脚本赋权,并执行
chmod +x /home/warehouse/shell/sqoop_export.sh
/home/warehouse/shell/sqoop_export.sh all
  • 在Mysql中查看是否执行成功
SELECT * FROM ads_sale_tm_category1_stat_mn;

5.8、Azkaban自动化调度

  • 在Mysql中执行SQL,生成数据
CALL init_data('2020-06-12',300,200,300,FALSE);
  • 编写azkaban运行job,并打包成mall-job.zip文件
  • 在3台虚拟机中同时启动Azkaban
azkaban-executor-start.sh
  • 在存放shell脚本的虚拟机上启动Azkaban Web服务器
cd /opt/app/azkaban/server
azkaban-web-start.sh
  • 访问Azkaban Web界面,端口8443
  • 上传并运行job,运行时指定executor为shell脚本存放的服务器,并配置脚本参数
useExecutor node03
dt 2020-06-12

6、课后练习

  • 计算GMV(成交总额),包含付款和未付款部分,导出到Mysql
    在这里插入图片描述

  • 编写为Shell脚本,使用Azkaban进行自动化调度

  • 提示:依赖的表为dws_user_action

6.1、ADS层分析

  • 计算GMV(成交总额),包含付款和未付款部分
  • 在这里插入图片描述

6.2、ADS层创建&数据接入

  • 在/home/warehouse/sql目录下编写ads_gmv_ddl.sql,创建DWS层数据表
vim /home/warehouse/sql/ads_gmv_ddl.sql
  • 将ads_gmv_ddl.sql导入到Hive中
hive -f /home/warehouse/sql/ads_gmv_ddl.sql
  • 在/home/warehouse/shell目录下编写ads_gmv.sh脚本,完成数据导入操作
vim /home/warehouse/shell/ads_gmv.sh
  • 为脚本赋权,并执行
chmod +x /home/warehouse/shell/ads_gmv.sh
/home/warehouse/shell/ads_gmv.sh 2020-06-10
  • 查看是否执行成功
select * from ads_gmv_sum_day;

6.3、Azkaban自动化调度

  • 在Mysql中执行SQL,生成数据
CALL init_data('2020-06-12',300,200,300,FALSE);
  • 编写azkaban运行job,并打包成mall-job.zip文件
  • 在3台虚拟机中同时启动Azkaban
azkaban-executor-start.sh
  • 在存放shell脚本的虚拟机上启动Azkaban Web服务器
cd /opt/app/azkaban/server
azkaban-web-start.sh
  • 访问Azkaban Web界面,端口8443
  • 上传并运行job,运行时指定executor为shell脚本存放的服务器,并配置脚本参数
useExecutor node03
dt 2020-06-12

参考资料
阿里云:https://www.alipan.com/s/zuK576wnz2n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1337735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试】Java中的多种设计模式(十种主要设计模式)

Java中的多种设计模式&#xff08;十种主要设计模式&#xff09; 文章概述 设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。它是软件工程中常见问题的解决方案的一种描述或模板。设计模式可以提供一种通用的、可重用的解决方案&#xff0c;帮助开发…

leetcode 75. 颜色分类(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public void sortColors(int[] nums) {int left-1,rightnums.length,i0;while(i<right){if(nums[i]0){left;swap(nums,left,i);i;}else if(nums…

【学习笔记】Java函数式编程03 Stream流-终结操作

书接上回 3.3.3 终结操作 3.3.3.1 forEach 对集合的每一个元素进行处理 接触很多了不赘述 3.3.3.2 count 用来获取当前流中的元素的个数 比如&#xff0c;打印出所有作家的作品的总数 System.out.println(authors.stream().flatMap(author -> author.getBooks().stre…

第九部分 图论

目录 例 相关概念 握手定理 例1 图的度数列 例 无向图的连通性 无向图的连通度 例2 例3 有向图D如图所示&#xff0c;求 A, A2, A3, A4&#xff0c;并回答诸问题&#xff1a; 中间有几章这里没有写&#xff0c;感兴趣可以自己去学&#xff0c;组合数学跟高中差不多&#xff0c…

2024,华为重塑笔记本的“创新周期”

作者 | 曾响铃 文 | 响铃说 谈及电脑PC&#xff0c;相信不少消费者都会下意识地给行业贴一个标签&#xff1a;夕阳行业。毕竟当下已经是移动互联网时代&#xff0c;传统PC的使用场景不断萎缩&#xff0c;市场研究机构Gartner报告显示&#xff0c;截至2023年第三季度&#xff…

LLM应用于MPC

现有的基于学习的自动驾驶系统&#xff08;AD&#xff09;在理解高级信息和提供可解释性方面存在挑战。为了解决这些问题&#xff0c;这项工作采用LLM作为复杂AD场景的决策组件。作者设计了认知途径&#xff08;cognitive pathway&#xff09;来实现LLM的综合推理&#xff0c;并…

python作业题百度网盘,python作业答案怎么查

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python作业题百度网盘&#xff0c;python作业答案怎么查&#xff0c;今天让我们一起来看看吧&#xff01; 1 以下代码的输出结果为&#xff1a; alist [1, 2, 3, 4] print(alist.reverse()) print(alist) A.[4, 3, 2, …

Python爬虫中的代理IP设置与实战策略

在Python爬虫中&#xff0c;使用代理IP设置是一种常见的策略&#xff0c;主要用于以下几个目的&#xff1a; 1. 避免被目标网站封禁&#xff1a;频繁的请求可能会引起目标网站的注意&#xff0c;导致你的IP被封锁。通过使用代理IP&#xff0c;你可以模拟来自不同地点和设备的请…

【WPF】使用Behavior以及ValidationRule实现表单校验

文章目录 使用ValidationRule实现检测用户输入EmptyValidationRule 非空校验TextBox设置非空校验TextBox设置非空校验并显示校验提示 结语 使用ValidationRule实现检测用户输入 EmptyValidationRule是TextBox内容是否为空校验&#xff0c;TextBox的Binding属性设置ValidationRu…

AR智慧校园三维主电子沙盘系统研究及应用

一 、概述 易图讯科技(www.3dgis.top)自主研发的智慧校园三维主电子沙盘系统&#xff0c;采用B/S架构模式&#xff0c;采用自主可控高性能WebGIS可视化引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和专题数据&#xff0c;提供地理信息数据、专题数据的并发访问…

爬虫工作量由小到大的思维转变---<第二十八章 Scrapy中间件说明书>

爬虫工作量由小到大的思维转变---&#xff1c;第二十六章 Scrapy通一通中间件的问题&#xff1e;-CSDN博客 前言: (书接上面链接)自定义中间件玩不明白? 好吧,写个翻译的文档点笔记,让中间件更通俗一点!!! 正文: 全局图: 爬虫中间件--->翻译笔记: from scrapy import s…

ES慢查询分析——性能提升6 倍

问题 生产环境频繁报警。查询跨度91天的数据&#xff0c;请求耗时已经来到了30s。报警的阈值为5s。 背景 查询关键词简单&#xff0c;为‘北京’ 单次仅检索两个字段 查询时间跨度为91天&#xff0c;覆盖数据为450亿数据 问题分析 使用profle分析&#xff0c;复现监控报警的…

Go在Win10上接收UDP组播数据

第一步、绑定本机某张网卡的IP和端口&#xff0c;本代码选择IP为0.0.0.0&#xff0c;端口为8000&#xff1b;第二步、加入组播&#xff0c;组播地址为“224.0.0.1”&#xff1b;第三步、循环接收UDP组播数据&#xff1b; 代码 package mainimport ("fmt""golang…

从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革

作者&#xff1a;黄晓萌(学仁) 背景 Job 表示短周期的作业&#xff0c;定时 Job 表示按照预定的时间运行Job&#xff0c;或者按照某一频率周期性的运行 Job。比如&#xff1a; 许多传统企业使用 Linux 自带的 crontab 来做定时任务的方案&#xff0c;该方案非常简单&#xff…

“巴渝工匠杯”2022年重庆市职业院校技能大赛(高职组)云计算样题

“巴渝工匠杯”2022年重庆市职业院校技能大赛&#xff08;高职组&#xff09;云计算样题 需要软件包环境可私信博主 【赛程名称】云计算赛项第一场次-私有云 某企业拟使用OpenStack搭建一个企业云平台&#xff0c;以实现资源池化弹性管理、企业应用集中管理、统一安全认证和授…

PostGIS学习教程十五:几何图形的有效性

PostGIS学习教程十五&#xff1a;几何图形的有效性 在90%的情况下&#xff0c;“为什么我的查询给了我一个’TopologyException’错误"的问题的答案是"一个或多个输入的几何图形是无效的”&#xff0c;这就引出了这样一个问题:几何图形"无效"是什么意思&a…

从计算机内存结构到iOS

一、冯.诺伊曼结构 当前计算机都是冯.诺伊曼结构&#xff08;Von Neumann architecture&#xff09;&#xff0c;是指存储器存放程序的指令以及数据&#xff0c;在程序运行时根据需要提供给CPU使用。 冯.诺伊曼瓶颈 在目前的科技水平之下&#xff0c;CPU与存储器之间的读写速…

【C Primer Plus第六版 学习笔记】第十四章 结构和其他数据形式

有基础&#xff0c;进阶用&#xff0c;个人查漏补缺 建立结构声明&#xff1a;描述该对象由什么组成&#xff0c;即结构布局 格式&#xff1a; 关键字 标记&#xff08;可选&#xff09;{结构 }&#xff1b; 举例&#xff1a; struct book{char title[2];char author[4];float …

Xcode 编译速度慢是什么原因?如何提高编译速度?

作为一个开发者&#xff0c;我们都希望能够高效地开发应用程序&#xff0c;而编译速度是影响开发效率的重要因素之一。然而&#xff0c;有时候我们会发现在使用 Xcode 进行开发时&#xff0c;译速度非常慢&#xff0c;这给我们带来了不少困扰。那么&#xff0c;为什么 Xcode 的…

分页合理化是什么?

一、前言 大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 只要是干过后台系统的同学应该都做过分页查…