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

简介: 数仓学习---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版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
3月前
|
存储 SQL 机器学习/深度学习
一文辨析:数据仓库、数据湖、湖仓一体
本文深入解析数据仓库、数据湖与湖仓一体的技术原理与适用场景。数据仓库结构严谨、查询高效,适合处理结构化数据;数据湖灵活开放,支持多模态数据,但治理难度高;湖仓一体融合两者优势,实现低成本存储与高效分析,适合大规模数据场景。文章结合企业实际需求,探讨如何选择合适的数据架构,并提供湖仓一体的落地迁移策略,助力企业提升数据价值。
一文辨析:数据仓库、数据湖、湖仓一体
|
3月前
|
存储 机器学习/深度学习 数据采集
数据湖 vs 数据仓库:大厂为何总爱“湖仓并用”?
数据湖与数据仓库各有优劣,湖仓一体架构成为趋势。本文解析二者核心差异、适用场景及治理方案,助你选型落地。
数据湖 vs 数据仓库:大厂为何总爱“湖仓并用”?
|
3月前
|
存储 机器学习/深度学习 数据采集
一文讲透数据仓库、数据湖、数据海的区别
企业常因数据架构不清导致报表延迟、数据矛盾、利用困难。核心解法是构建数据仓库(高效分析)、数据湖(灵活存储原始数据)和数据海(全局集成)。三者各有适用场景,需根据业务需求选择,常共存互补,助力数据驱动决策。
一文讲透数据仓库、数据湖、数据海的区别
|
4月前
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
5月前
|
存储 BI API
一文读懂数据中台和数据仓库的区别
本文深入解析了“数据中台”与“数据仓库”的区别,从定义、功能、架构设计、数据处理、应用场景等多个维度进行对比,帮助企业更清晰地理解二者的核心差异与适用场景。数据仓库重在存储与分析历史数据,服务于高层决策;数据中台则强调数据的实时处理与服务化输出,直接赋能一线业务。文章还结合企业规模、业务需求与技术能力,给出了选型建议,助力企业在数字化转型中做出更科学的选择。
1242 11
|
存储 数据管理 BI
揭秘数据仓库的奥秘:数据究竟如何层层蜕变,成为企业决策的智慧源泉?
【8月更文挑战第26天】数据仓库是企业管理数据的关键部分,其架构直接影响数据效能。通过分层管理海量数据,提高处理灵活性及数据一致性和安全性。主要包括:数据源层(原始数据)、ETL层(数据清洗与转换)、数据仓库层(核心存储与管理)及数据服务层(提供分析服务)。各层协同工作,支持高效数据管理。未来,随着技术和业务需求的变化,数仓架构将持续优化。
262 3
|
存储 Cloud Native 关系型数据库
云原生数据仓库使用问题之如何将一行数据转换为多行数据
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
11月前
|
人工智能 关系型数据库 MySQL
AnalyticDB MySQL版:云原生离在线一体化数据仓库支持实时业务决策
AnalyticDB MySQL版是阿里云推出的云原生离在线一体化数据仓库,支持实时业务决策。产品定位为兼具数据库应用性和大数据处理能力的数仓,适用于大规模数据分析场景。核心技术包括混合负载、异构加速、智能弹性与硬件优化及AI集成,支持流批一体架构和物化视图等功能,帮助用户实现高效、低成本的数据处理与分析。通过存算分离和智能调度,AnalyticDB MySQL可在复杂查询和突发流量下提供卓越性能,并结合AI技术提升数据价值挖掘能力。
338 16
|
存储 机器学习/深度学习 数据管理
数据技术的进化史:从数据仓库到数据中台再到数据飞轮
数据技术的进化史:从数据仓库到数据中台再到数据飞轮
|
机器学习/深度学习 消息中间件 搜索推荐
【数据飞轮】驱动业务增长的高效引擎 —从数据仓库到数据中台的技术进化与实战
在数据驱动时代,企业逐渐从数据仓库过渡到数据中台,并进一步发展为数据飞轮。本文详细介绍了这一演进路径,涵盖数据仓库的基础存储与查询、数据中台的集成与实时决策,以及数据飞轮的自动化增长机制。通过代码示例展示如何在实际业务中运用数据技术,实现数据的最大价值,推动业务持续优化与增长。