电商数仓(四):电商数据仓库实战
本文为学习笔记,对应视频教程来自【尚硅谷】电商数仓V5.0
数据仓库环境准备
数据仓库运行环境
Hive环境搭建
Hive引擎简介
Hive引擎包括:默认MR、tez、spark
Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。
Spark on Hive : Hive只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用RDD执行。
Hive on Spark配置
官网下载的Hive3.1.2和Spark3.0.0默认是不兼容的。因为Hive3.1.2支持的Spark版本是2.4.5,所以需要我们重新编译Hive3.1.2版本。
编译步骤:官网下载Hive3.1.2源码,修改pom文件中引用的Spark版本为3.0.0,如果编译通过,直接打包获取jar包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取jar包。
1 | 1.在Hive所在节点部署Spark |
Yarn环境配置
增加ApplicationMaster资源比例
容量调度器对每个资源队列中同时运行的Application Master占用的资源进行了限制,该限制通过yarn.scheduler.capacity.maximum-am-resource-percent参数实现,其默认值是0.1,表示每个资源队列上Application Master最多可使用的资源为该队列总资源的10%,目的是防止大部分资源都被Application Master占用,而导致Map/Reduce Task无法执行。
生产环境该参数可使用默认值。但学习环境,集群资源总数很少,如果只分配10%的资源给Application Master,则可能出现,同一时刻只能运行一个Job的情况,因为一个Application Master使用的资源就可能已经达到10%的上限了。故此处可将该值适当调大。
1 | 1.在hadoop102的/opt/module/hadoop-3.1.3/etc/hadoop/capacity-scheduler.xml文件中修改如下参数值 |
数据仓库开发环境
启动HiveServer2
1 | [eitan@hadoop102 ~]$ /opt/module/hive/bin/hiveserver2 |
配置DataGrip连接
模拟数据准备
通常企业在开始搭建数仓时,业务系统中会存在历史数据,一般是业务数据库存在历史数据,而用户行为日志无历史数据。假定数仓上线的日期为2020-06-14,为模拟真实场景,需准备以下数据。注:在执行以下操作之前,先将HDFS上/origin_data路径下之前的数据删除。
用户行为日志
用户行为日志,一般是没有历史数据的,故日志只需要准备2020-06-14一天的数据。
1 | 1.启动日志采集通道,包括Flume、Kafak等 |
业务数据
1 | 1.业务数据一般存在历史数据,此处需准备2020-06-10至2020-06-14的数据 |
数仓开发之ODS层
ODS层的设计要点如下:
- ODS层的表结构设计依托于从业务系统同步过来的数据结构。
- ODS层要保存全部历史数据,故其压缩格式应选择压缩比较高的,此处选择gzip。
- ODS层表名的命名规范为:ods_表名_单分区增量全量标识(inc/full)。
日志表
建表数据
1 | -- 创建静态分区外部表 |
解决DataGrip元数据显示问题
1 | [eitan@hadoop102 ~]$ vim /opt/module/hive/conf/hive-site.xml |
每日数据装载脚本
1 | [eitan@hadoop102 ~]$ vim ~/bin/hdfs_to_ods_log.sh |
业务表
活动信息表(全量表)
1 | DROP TABLE IF EXISTS ods_activity_info_full; |
活动规则表(全量表)
1 | DROP TABLE IF EXISTS ods_activity_rule_full; |
一级品类表(全量表)
1 | DROP TABLE IF EXISTS ods_base_category1_full; |
二级品类表(全量表)
1 | DROP TABLE IF EXISTS ods_base_category2_full; |
三级品类表(全量表)
1 | DROP TABLE IF EXISTS ods_base_category3_full; |
编码字典表(全量表)
1 | DROP TABLE IF EXISTS ods_base_dic_full; |
省份表(全量表)
1 | DROP TABLE IF EXISTS ods_base_province_full; |
地区表(全量表)
1 | DROP TABLE IF EXISTS ods_base_region_full; |
品牌表(全量表)
1 | DROP TABLE IF EXISTS ods_base_trademark_full; |
购物车表(全量表)
1 | DROP TABLE IF EXISTS ods_cart_info_full; |
优惠券信息表(全量表)
1 | DROP TABLE IF EXISTS ods_coupon_info_full; |
商品平台属性表(全量表)
1 | DROP TABLE IF EXISTS ods_sku_attr_value_full; |
商品表(全量表)
1 | DROP TABLE IF EXISTS ods_sku_info_full; |
商品销售属性值表(全量表)
1 | DROP TABLE IF EXISTS ods_sku_sale_attr_value_full; |
SPU表(全量表)
1 | DROP TABLE IF EXISTS ods_spu_info_full; |
购物车表(增量表)
1 | DROP TABLE IF EXISTS ods_cart_info_inc; |
评论表(增量表)
1 | DROP TABLE IF EXISTS ods_comment_info_inc; |
优惠券领用表(增量表)
1 | DROP TABLE IF EXISTS ods_coupon_use_inc; |
收藏表(增量表)
1 | DROP TABLE IF EXISTS ods_favor_info_inc; |
订单明细表(增量表)
1 | DROP TABLE IF EXISTS ods_order_detail_inc; |
订单明细活动关联表(增量表)
1 | DROP TABLE IF EXISTS ods_order_detail_activity_inc; |
订单明细优惠券关联表(增量表)
1 | DROP TABLE IF EXISTS ods_order_detail_coupon_inc; |
订单表(增量表)
1 | DROP TABLE IF EXISTS ods_order_info_inc; |
退单表(增量表)
1 | DROP TABLE IF EXISTS ods_order_refund_info_inc; |
订单状态流水表(增量表)
1 | DROP TABLE IF EXISTS ods_order_status_log_inc; |
支付表(增量表)
1 | DROP TABLE IF EXISTS ods_payment_info_inc; |
退款表(增量表)
1 | DROP TABLE IF EXISTS ods_refund_payment_inc; |
用户表(增量表)
1 | DROP TABLE IF EXISTS ods_user_info_inc; |
数据装载脚本
1 | [eitan@hadoop102 ~]$ vim ~/bin/hdfs_to_ods_db.sh |
数仓开发之DIM层
DIM层设计要点:
DIM层的设计依据是维度建模理论,该层存储维度模型的维度表。
DIM层的数据存储格式为orc列式存储+snappy压缩。
DIM层表名的命名规范为dim_表名_全量表或者拉链表标识(full/zip)
商品维度表
1 | DROP TABLE IF EXISTS dim_sku_full; |