6. 数据仓库环境准备

Posted cpuCode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_HOME
export 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-102020-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-122020-06-132020-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

以上是关于6. 数据仓库环境准备的主要内容,如果未能解决你的问题,请参考以下文章

编写假定大小的数组导致“上限不得省略...”

大数据数据仓库环境准备

数据仓库环境准备Hive常见问题及解决方式

数据仓库环境准备Hive常见问题及解决方式

Nacos 高可用集群部署

安利:win10专业版搭建mvn环境(内含阿里云中央仓库配置)图文教程