数仓学习---7、数据仓库设计、数据仓库环境准备、模拟数据生成

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 数仓学习---7、数据仓库设计、数据仓库环境准备

这是本人的学习过程,看到的同道中人祝福你们心若有所向往,何惧道阻且长;

但愿每一个人都像星星一样安详而从容的,不断沿着既定的目标走完自己的路程,一起做星光下的赶路人;

最后想说一句君子不隐其短,不知则问,不能则学。

如果大家觉得我写的还不错的话希望可以收获关注、点赞、收藏(谢谢大家)

一、数据仓库环境准备


1.1 数据仓库运行环境


1.1.1 Hive环境搭建

SQL(Code) =>(Hive => MR(Spark) =>jar)(Tool) => Yarn(RUN)

1、Hive引擎简介

Hive引擎包括:默认MR、Tez、Spark。

Hive on Spark:Hive既作为储存元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。

Spark On Hive:Hive只作为储存原数据,Spark负责SQL解析优化,语法是SparkSQL语法,Spark负责采用RDD执行。

2、Hive on Spark配置

image.png

(1)兼容性说明

注意:官网下载的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包。

(2)在Hive所在节点部署Spark

(2-1)Spark官网下载jar包地址

http://spark.apache.org/downloads.html

(2-2)上传并解压解压spark-3.0.0-bin-hadoop3.2.tgz

(2-3)配置SPARK_HOME环境变量

vim /etc/profile.d/my_env.sh
#添加如下内容
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
#Source使其生效
 source /etc/profile.d/my_env.sh

(2-4)在hive中创建spark配置文件

vim /opt/module/hive/conf/spark-defaults.conf
#添加如下内容(在执行任务时,会根据如下参数执行)
spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history
spark.executor.memory                    1g
spark.driver.memory            1g
#在HDFS创建如下路径,用于存储历史日志。
hadoop fs -mkdir /spark-history

(2-5)向HDFS上传Spark纯净版jar包

说明1:由于Spark3.0.0非纯净版默认支持的是hive2.3.7版本,直接使用会和安装的Hive3.1.2出现兼容性问题。所以采用Spark纯净版jar包,不包含hadoop和hive相关依赖,避免冲突。

说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。


(2-5-1)

上传并解压spark-3.0.0-bin-without-hadoop.tgz

(2-5-2)上传Spark纯净版jar包到HDFS


(2-6)修改hive-site.xml文件

vim /opt/module/hive/conf/hive-site.xml
#添加如下内容
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

image.png

3、Hive on Spark测试

(1)启动hive客户端

node1: 

bin/hive --service hiveserver2
/export/server/apache-hive-3.1.2-bin/bin/hive

node2:

export/server/apache-hive-3.1.2-bin/bin/beeline
连接访问
beeline> ! connect jdbc:hive2://node1:10000

image.png

(2)在Hive所在节点部署Spark纯净版

Spark官网下载jar包地址:

http://spark.apache.org/downloads.html

②上传并解压解压spark-3.3.1-bin-without-hadoop.tgz

[atguigu@hadoop102 software]$ tar -zxvf spark-3.3.1-bin-without-hadoop.tgz -C /opt/module/

[atguigu@hadoop102 software]$ mv /opt/module/spark-3.3.1-bin-without-hadoop /opt/module/spark

③修改spark-env.sh配置文件

修改文件名。

[atguigu@hadoop102 software]$ mv /opt/module/spark/conf/spark-env.sh.template /opt/module/spark/conf/spark-env.sh

编辑文件

[atguigu@hadoop102 software]$ vim /opt/module/spark/conf/spark-env.sh

增加如下内容。

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

(3)配置SPARK_HOME环境变量

[atguigu@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh

添加如下内容。

添加如下内容。

# SPARK_HOME

export SPARK_HOME=/opt/module/spark

export PATH=$PATH:$SPARK_HOME/bin

source 使其生效。

[atguigu@hadoop102 software]$ source /etc/profile.d/my_env.sh

4)在hive中创建spark配置文件

[atguigu@hadoop102 software]$ vim /opt/module/hive/conf/spark-defaults.conf

添加如下内容(在执行任务时,会根据如下参数执行)。

spark.master                               yarn

spark.eventLog.enabled                   true

spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history

spark.executor.memory                    1g

spark.driver.memory     1g

在HDFS创建如下路径,用于存储历史日志。

[atguigu@hadoop102 software]$ hadoop fs -mkdir /spark-history

(5)向HDFS上传Spark纯净版jar包

说明1:采用Spark纯净版jar包,不包含hadoop和hive相关依赖,能避免依赖冲突。

说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。

[atguigu@hadoop102 software]$ hadoop fs -mkdir /spark-jars

 

[atguigu@hadoop102 software]$ hadoop fs -put /opt/module/spark/jars/* /spark-jars

(6)修改hive-site.xml文件

[atguigu@hadoop102 ~]$ vim /opt/module/hive/conf/hive-site.xml

添加如下内容。

<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->

<property>

   <name>spark.yarn.jars</name>

   <value>hdfs://hadoop102:8020/spark-jars/*</value>

</property>

 

<!--Hive执行引擎-->

<property>

   <name>hive.execution.engine</name>

   <value>spark</value>

</property>

3Hive on Spark测试

(1)启动hive客户端

[atguigu@hadoop102 hive]$ hive

(2)创建一张测试表

hive (default)> create table student(id int, name string);

(3)通过insert测试效果

hive (default)> insert into table student values(1,'abc');

若结果如下,则说明配置成功。

image.png



2.1.2 Yarn环境配置


1、增加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)在hadoop102的/opt/module/hadoop-3.1.3/etc/hadoop/capacity-scheduler.xml文件中修改如下参数值

vim capacity-scheduler.xml
#修改
<property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.8</value>
</property

2)分发capacity-scheduler.xml配置文件

xsync capacity-scheduler.xml

(3)关闭正在运行的任务,重新启动yarn集群

sbin/stop-yarn.sh
sbin/start-yarn.sh

2.2 数据仓库开发环境


数仓开发工具可选用DBeaver或者DataGrip。两者都需要用到JDBC协议连接到Hive,故需要启动HiveServer2。

1、启动HiveServer2

image.png

image.png

2.3模拟数据准备

通常企业在开始搭建数仓时,业务系统中会存在历史数据,一般是业务数据库存在历史数据,而用户行为日志无历史数据。假定数仓上线的日期为2022-06-08,为模拟真实场景,需准备以下数据。

注:在执行以下操作之前,先将HDFS上/origin_data路径下之前的数据删除。

1)启动采集通道

上课老师用的是:xmock start loginc

启动数据生成:xmock start data

命令如下。

[atguigu@hadoop102 ~]$ cluster.sh start

停止Maxwell。

[atguigu@hadoop102 bin]$ mxw.sh stop

停止Maxwell

2)数据准备

(1)生成模拟数据

① 修改hadoop102节点的/opt/module/applog/application.yml文件,将mock.date,mock.clear,mock.clear.user,mock.new.usermock.log.db.enable五个参数调整为如下的值。

#业务日期

mock.date: "2022-06-04"

#是否重置业务数据

mock.clear.busi: 1

#是否重置用户数据

mock.clear.user: 1

# 批量生成新用户数量

mock.new.user: 100

# 日志是否写入数据库一份  写入z_log表中

mock.log.db.enable: 0

 执行数据生成脚本,生成第一天2022-06-04的历史数据。

[atguigu@hadoop102 applog]$ lg.sh

③ 修改/opt/module/applog/application.properties文件,将mock.date、mock.clear,mock.clear.usermock.new.user四个参数调整为如图所示的值。

#业务日期

mock.date: "2022-06-05"

#是否重置业务数据

mock.clear.busi: 0

#是否重置用户数据

mock.clear.user: 0

# 批量生成新用户

mock.new.user: 0

④ 执行数据生成脚本,生成第二天2022-06-05的历史数据。

[atguigu@hadoop102 applog]$ lg.sh

⑤ 之后只修改/opt/module/applog/application.properties文件中的mock.date参数,依次改为2022-06-06,2022-06-07,并分别生成对应日期的数据。

⑥ 删除/origin_data/gmall/log目录,将⑤中提到的参数修改为2022-06-08,并生成当日模拟数据。

(2)全量表同步

① 执行全量表同步脚本

[atguigu@hadoop102 bin]$ mysql_to_hdfs_full.sh all 2022-06-08

② 观察HDFS上是否出现全量表数据

(3)增量表首日全量同步

① 清除Maxwell断点记录

由于Maxwell支持断点续传,而上述重新生成业务数据的过程,会产生大量的binlog操作日志,这些日志我们并不需要。故此处需清除Maxwell的断点记录,令其从binlog最新的位置开始采集。

清空Maxwell数据库,相当于初始化Maxwell。

mysql>

drop table maxwell.bootstrap;

drop table maxwell.columns;

drop table maxwell.databases;

drop table maxwell.heartbeats;

drop table maxwell.positions;

drop table maxwell.schemas;

drop table maxwell.tables;

② 修改Maxwell配置文件中的mock_date参数

[atguigu@hadoop102 maxwell]$ vim /opt/module/maxwell/config.properties

 

mock_date=2022-06-08

③ 启动Maxwell

④ 执行增量表首日全量同步脚本

[atguigu@hadoop102 bin]$ mysql_to_kafka_inc_init.sh all

⑤ 观察HDFS上是否出现增量表数据

image.png

image.png

(1-2)执行模拟生成业务数据的命令,生成第一天2020-06-4的历史数据。

java -jar gmall2020-mock-db-2021-01-22.jar

(1-4)执行模拟生成业务数据的命令,生成第二天2020-06-11的历史数据。

java -jar gmall2020-mock-db-2021-10-10.jar

(1-5)之后只修改/opt/module/db_log/application.properties文件中的mock.date参数,依次改为2020-06-12,2020-06-13,2020-06-14,并分别生成对应日期的数据。


(2)全量表同步

(2-1)执行全量表同步脚本

mysql_to_hdfs_full.sh all 2020-06-14

(2-1)观察HDFS上是否出现全量表数据


(3)增量表首日全量同步

(3-1)清除Maxwell断点记录

由于Maxwell支持断点续传,而上述重新生成业务数据的过程,会产生大量的binlog操作日志,这些日志我们并不需要。故此处需清除Maxwell的断点记录,另其从binlog最新的位置开始采集。

关闭Maxwell。

mxw.sh stop

清空Maxwell数据库,相当于初始化Maxwell。

mysql> 
drop table maxwell.bootstrap;
drop table maxwell.columns;
drop table maxwell.databases;
drop table maxwell.heartbeats;
drop table maxwell.positions;
drop table maxwell.schemas;
drop table maxwell.tables;

(3-2)修改Maxwell配置文件中的mock_date参数

vim /opt/module/maxwell/config.properties
#修改如下
mock_date=2020-06-14

(3-3)启动增量表数据通道,包括Maxwell、Kafka、Flume

(3-4)执行增量表首日全量同步脚本

mysql_to_kafka_inc_init.sh all


(3-5)观察HDFS上是否出现全量表数据

恭喜大家看完了小编的博客,希望你能够有所收获,我一直相信躬身自问和沉思默想会充实我们的头脑,希望大家看完之后可以多想想喽,编辑不易,求关注、点赞、收藏(Thanks♪(・ω・)ノ)


相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
2月前
|
存储 数据管理 BI
揭秘数据仓库的奥秘:数据究竟如何层层蜕变,成为企业决策的智慧源泉?
【8月更文挑战第26天】数据仓库是企业管理数据的关键部分,其架构直接影响数据效能。通过分层管理海量数据,提高处理灵活性及数据一致性和安全性。主要包括:数据源层(原始数据)、ETL层(数据清洗与转换)、数据仓库层(核心存储与管理)及数据服务层(提供分析服务)。各层协同工作,支持高效数据管理。未来,随着技术和业务需求的变化,数仓架构将持续优化。
57 3
|
3月前
|
存储 Cloud Native 关系型数据库
云原生数据仓库使用问题之如何将一行数据转换为多行数据
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
1月前
|
存储 机器学习/深度学习 数据管理
数据技术的进化史:从数据仓库到数据中台再到数据飞轮
数据技术的进化史:从数据仓库到数据中台再到数据飞轮
|
27天前
|
机器学习/深度学习 消息中间件 搜索推荐
【数据飞轮】驱动业务增长的高效引擎 —从数据仓库到数据中台的技术进化与实战
在数据驱动时代,企业逐渐从数据仓库过渡到数据中台,并进一步发展为数据飞轮。本文详细介绍了这一演进路径,涵盖数据仓库的基础存储与查询、数据中台的集成与实时决策,以及数据飞轮的自动化增长机制。通过代码示例展示如何在实际业务中运用数据技术,实现数据的最大价值,推动业务持续优化与增长。
65 4
|
19天前
|
存储 数据管理 大数据
从数据仓库到数据中台再到数据飞轮:社交媒体的数据技术进化史
从数据仓库到数据中台再到数据飞轮:社交媒体的数据技术进化史
|
2月前
|
DataWorks 负载均衡 Serverless
实时数仓 Hologres产品使用合集之如何导入大量数据
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
2月前
|
SQL 消息中间件 OLAP
OneSQL OLAP实践问题之实时数仓中数据的分层如何解决
OneSQL OLAP实践问题之实时数仓中数据的分层如何解决
50 1
|
2月前
|
SQL DataWorks 数据库连接
实时数仓 Hologres操作报错合集之如何将物理表数据写入临时表
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
2月前
|
SQL 分布式计算 关系型数据库
实时数仓 Hologres操作报错合集之指定主键更新模式报错主键数据重复,该如何处理
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
2月前
|
SQL 分布式计算 MaxCompute
实时数仓 Hologres产品使用合集之如何在插入数据后获取自增的id值
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
实时数仓 Hologres产品使用合集之如何在插入数据后获取自增的id值