0


6. 数据仓库环境准备

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 上是否出现全量表数据

在这里插入图片描述

  1. 电商数据仓库系统

https://blog.csdn.net/qq_44226094/article/details/123013113

标签: 数据仓库 hive spark

本文转载自: https://blog.csdn.net/qq_44226094/article/details/123464218
版权归原作者 cpuCode 所有, 如有侵权,请联系我们删除。

“6. 数据仓库环境准备”的评论:

还没有评论