6. 数据仓库环境准备
1. 数据仓库环境准备
1.1 数据仓库运行环境
1.1.1 Hive环境搭建
https://blog.csdn.net/qq_44226094/article/details/123218860
Hive引擎:
- 默认MR
- Tez
- Spark
Hive on Spark:Hive 既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行引擎变成了 Spark ,Spark 负责采用 RDD 执行
Spark on Hive : Hive 只作为存储元数据,Spark 负责 SQL 解析优化,语法是 Spark SQL 语法,Spark 负责采用 RDD 执行
1.1.1.1 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 包
在 Hive 所在节点部署 Spark
Spark 官网下载 jar 包地址:
http://spark.apache.org/downloads.html
上传并解压解压
spark-3.0.0-bin-hadoop3.2.tgz
tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/
重名 :
mv spark-3.0.0-bin-hadoop3.2/ spark-3.0.0/
配置 SPARK_HOME 环境变量
sudo vim /etc/profile.d/my_env.sh
添加内容 :
# SPARK_HOMEexport SPARK_HOME=/opt/module/spark-3.0.0
export PATH=$PATH:$SPARK_HOME/bin
source 使其生效
source /etc/profile.d/my_env.sh
在 hive 中创建 spark 配置文件
vim spark-defaults.conf
添加内容(执行任务时,会根据参数执行) :
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://cpu101:8020/spark-history
spark.executor.memory 1g
spark.driver.memory 1g
在 HDFS 创建如下路径,用于存储历史日志
hadoop fs -mkdir /spark-history
向 HDFS 上传 Spark 纯净版 jar 包
由于 Spark3.0.0 非纯净版默认支持的是 hive2.3.7 版本,直接使用会和安装的 Hive3.1.2 出现兼容性问题。所以采用 Spark 纯净版 jar 包,不包含hadoop 和 hive 相关依赖,避免冲突
Hive 任务最终由 Spark 来执行,Spark 任务资源分配由 Yarn 来调度,该任务有可能被分配到集群的任何一个节点。所以需要将 Spark 的依赖上传到HDFS 集群路径,让集群中任何一个节点都能获取到
上传并解压
spark-3.0.0-bin-without-hadoop.tgz
tar -zxvf /opt/software/spark-3.0.0-bin-without-hadoop.tgz
上传 Spark 纯净版 jar 包到 HDFS
hadoop fs -mkdir /spark-jars
hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars
**修改
hive-site.xml
文件**
vim hive-site.xml
配置 HA :
<!--Spark依赖位置(注意:端口号8020必须和 namenode 的端口号一致)--><property><name>spark.yarn.jars</name><value>hdfs://mycluster/spark-jars/*</value></property><!--Hive执行引擎--><property><name>hive.execution.engine</name><value>spark</value></property>
未配置 HA :
<!--Spark依赖位置(注意:端口号8020必须和 namenode 的端口号一致)--><property><name>spark.yarn.jars</name><value>hdfs://cpu101:8020/spark-jars/*</value></property><!--Hive执行引擎--><property><name>hive.execution.engine</name><value>spark</value></property>
1.1.1.2 Hive on Spark 测试
启动 hive 客户端
hive
创建一张测试表
create table student(id int, name string);
通过 insert 测试效果
ClassNotFoundException: org.apache.spark.AccumulatorParam 解决方案 :
https://blog.csdn.net/qq_44226094/article/details/123467092
insert into table student values(1, 'cpu');
insert into table student values(2, 'code');
1.1.2 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% 的上限了。所以可将该值适当调大
在 cpu101 的
/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>
分发
capacity-scheduler.xml
配置文件
xsync capacity-scheduler.xml
关闭正在运行的任务,重新启动
yarn
集群
stop-yarn.sh
start-yarn.sh
1.2 数据仓库开发环境
数仓开发工具 DataGrip。需要用到 JDBC 协议连接到 Hive,所以启动
HiveServer2
1.2.1 启动 HiveServer2
hiveserver2
1.2.2 配置 DataGrip 连接
1.2.2.1 创建连接
1.2.2.2 配置连接属性
所有属性配置,和 Hive 的 beeline 客户端配置一致即可
第一使用,配置过程会提示缺少 JDBC 驱动,下载即可
1.2.2.3 测试使用
创建数据库gmall,并观察是否创建成功
创建数据库
查看数据库
修改连接,指明连接数据库
选择当前数据库为 gmall
1.3 模拟数据准备
企业在开始搭建数仓时,业务数据库存在历史数据,用户行为日志无历史数据
假定数仓上线的日期为 2020-06-14,为模拟真实场景,需准备以下数据
在执行以下操作之前,先将 HDFS 上 /origin_data 路径下之前的数据删除
hadoop fs -rm -r /origin_data
1.3.1 用户行为日志
用户行为日志,一般是没有历史数据的,故日志只需要准备
2020-06-14
一天的数据
具体操作如下:
启动日志采集通道
Zookeeper
zk.sh start
Kafak
kf.sh start
Flume
f1.sh start
f2.sh start
修改两个日志服务器(cpu101、cpu102)
/opt/module/applog/application.yml
配置文件
mock.date=2020-06-14
执行日志生成脚本
lg.sh
观察 HDFS 是否出现相应文件
1.3.2 业务数据
业务数据一般存在历史数据,此处需准备
2020-06-10
至
2020-06-14
的数据
具体操作如下 :
关闭 Maxwell
mxw.sh stop
清空
gmall
数据 , 在重新 sql 写入
1.3.2.1 生成模拟数据
修改 cpu101 节点上的
/opt/module/db_log/application.properties
文件
#业务日期
mock.date=2020-06-10
#是否重置,首日须置为1,之后置为0
mock.clear=1
#是否重置用户,首日须置为1,之后置为0
mock.clear.user=1
执行模拟生成业务数据的命令,生成第一天 2020-06-10 的历史数据。
java -jar gmall2020-mock-db-2021-11-14.jar
修改
/opt/module/db_log/application.properties
文件
#业务日期
mock.date=2020-06-11
#是否重置,首日须置为1,之后置为0
mock.clear=0
#是否重置用户,首日须置为1,之后置为0
mock.clear.user=0
执行模拟生成业务数据的命令,生成第二天 2020-06-11 的历史数据
java -jar gmall2020-mock-db-2021-11-14.jar
之后只修改
/opt/module/db_log/application.properties
文件中的
mock.date
参数,依次改为
2020-06-12
,
2020-06-13
,
2020-06-14
,并分别生成对应日期的数据
1.3.2.2 全量表同步
执行全量表同步脚本
mysql_to_hdfs_full.sh all 2020-06-14
观察HDFS上是否出现全量表数据
1.3.2.3 增量表首日全量同步
清除 Maxwell 断点记录
由于 Maxwell; 支持断点续传,而重新生成业务数据的过程,会产生大量的 binlog 操作日志,这些日志并不需要。所以清除 Maxwell 的断点记录,从 binlog 最新的位置开始采集
关闭Maxwell
mxw.sh stop
清空 Maxwell 数据库,相当于初始化 Maxwell
修改 Maxwell 配置文件中的 mock_date 参数
vim config.properties
mock_date=2020-06-14
启动增量表数据通道,包括 Maxwell、Kafka、Flume
f3.sh start
kf.sh start
mxw.sh start
执行增量表首日全量同步脚本
mysql_to_kafka_inc_init.sh all
观察 HDFS 上是否出现全量表数据
- 电商数据仓库系统
版权归原作者 cpuCode 所有, 如有侵权,请联系我们删除。