超详细【入门精讲】数据仓库原理&实战 一步一步搭建数据仓库 内附相应实验代码和镜像数据和脚本_数仓代码-程序员宅基地

技术标签: 大数据分析  数据仓库  hadoop  数据库  

文章对应的博客园链接:点击这里

文章目录

0. B站相关课程链接 和 搭建数据仓库资源及脚本下载

建议搭配视频内容食用,效果更加。也可以直接按博客内容学习完成搭建

B站课程链接:课程链接地址

下载UP主 哈喽鹏程 提供的资源镜像及脚本包

后续所使用的SQL脚本和shell脚本及job脚本文件,均在此下载,请自行下载

下载连接:

数据仓库的课件:
链接:百度网盘链接1
提取码:d3a9

数据仓库的实验数据,资源镜像及脚本包:

链接:百度网盘链接2

提取码:fwpq

数据仓库的automaticDeploy项目代码:
链接:百度网盘链接3
提取码:7nff

备用链接:

数据仓库的实验数据,资源镜像及脚本包:

链接: 百度网盘链接4

提取码:ik61

数据仓库的资源镜像及脚本包和automaticDeploy项目代码(最全):

OneDrive链接

食用指南:建议先把博客整体看一遍之后再进行操作

文章最后有常见问题及解决方法

点赞+收藏,不会迷路!!!

R-C

1. 项目介绍及整体流程

1.1项目介绍

image-20230328174319743

1.2 数据仓库架构

image-20230328175219754

1.3 环境规划

image-20230328174547900

1.4 整体开发流程

image-20230328175509758

2. 环境准备01-02(虚拟机和FinalShell或Xshell)

2.1 软件下载

安装以下软件:

  • 虚拟机软件: Virtual Box, 下载链接: https://www.virtualbox.org/

  • 远程连接软件: Xshell (也可以使用其他远程连接软件, 推荐使用FinalShell,本博客使用的是FinalShell)

Virtual Box, 下载链接https://www.virtualbox.org/

XShell,下载链接https://www.xshell.com/zh/xshell/

FinalShell,下载链接http://www.hostbuf.com/t/988.html网盘连接:https://www.aliyundrive.com/s/WSvcTJZyeVM

Xshell和FinalShell均为远程连接工具,使用其中一个即可

资源镜像及脚本包的地址在第0章节

2.2 安装Virtual Box及导入OVA镜像

官网下载安装包,一路next就行,可以更改安装路径

image-20230327224724485

image-20230327224922737

image-20230327225053380

image-20230327225311322

node02,node03同样的操作

虚拟机第一次打开的时候可能会有网络报错,这个时候需要操作一下

image-20230327225530285

这里需要手动选择一次网卡,注意是一定要再选择一次

image-20230327225704752

然后可以开启虚拟机了

三台虚拟机用户名及密码进入虚拟机

node01 root 123456
node02 root 123456
node03 root 123456

2.3 修改虚拟机静态IP地址

windows下查看IP地址

win+r 然后输入cmd 回车,打开命令行窗口,输入ipconfig查看主机ip地址

例如:

192.168.192.175
本地链接 IPv6 地址. . . . . . . . : fe80::8ecd:4848:96f2:2659%6
IPv4 地址 . . . . . . . . . . . . : 192.168.192.175
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : fe80::40a2:4aff:feb4:7d31%6
. . . . . . . . . . . . … . . . . . . . 192.168.192.165

在得到主机的IP地址后,分别对三台虚拟机node01node02node03进行修改

IPADDR IPV4地址前三位不用动,最后一位随便改

GATEWAY IPV4地址前三位不用动 ,最后一位为1

例如我的IP为192.168.192.175,则修改为以下内容:

node01中的ifcfg-enp0s3文件中IPADDR=192.168.192.176
node02中的ifcfg-enp0s3文件中IPADDR=192.168.192.177
node03中的ifcfg-enp0s3文件中IPADDR=192.168.192.178
!!!node02node03中的GATEWAY=192.168.192.1

修改配置文件 ifcfg-enp0s3

[root@node01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
[root@node01 ~]# systemctl restart network
[root@node02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
[root@node02 ~]# systemctl restart network
[root@node03 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
[root@node03 ~]# systemctl restart network

更新配置 systemctl restart network

注意node01没有GATEWAY,node02node03有GATEWAY

image-20230320163722468

设置完成后,建议一次搞定接下来的操作,不然之后连接热点时,主机IP地址可能会发生改变,然后三台虚拟机就连接不上了

问题:主机IP地址发生改变

解决方法:参考文章结尾17.9

2.4 使用远程连接工具FinalShell连接虚拟机node节点

这里使用 FinalShell SSH连接虚拟机

node01配置如下, node02和node03同理

image-20230401155845435

image-20230327191341171

image-20230401160026489

3. 环境搭建03 (脚本准备)

wget https://github.com/Mtlpc/automaticDeploy/archive/master.zip

这条命令在虚拟机上运行可能会有问题

建议直接去github下载 https://github.com/Mtlpc/automaticDeploy

在文章开头部分我也给了网盘下载链接

(直接去下载然后上传到node01/home/hadoop/路径下, 如果你使用的是 FinalShell 可以直接上传,如果使用的是Xshell, 则需安装上传组件lrzsz, 安装方法在下一节)

image-20230401151248990

点击 <>Code,然后Download Zip, 下载下来的文件名称为 automaticDeploy-master.zip

将下载好的文件上传到 /home/hadoop 下并解压,解压后文件夹名为 automaticDeploy-master,将解压后的文件名改成 automaticDeploy,否则运行会报错

!!!注:如果文件夹名多了master后缀或者是其他的名字,请重命名为automaticDeploy

注:如果使用finalShell 文件上传组件栏没有显示上传好的文件,请刷新一下

以下是 automaticDeploy 中的文件

[root@node01 ~]# mkdir /home/hadoop/
[root@node01 ~]# cd /home/hadoop/
# 这里需要将automaticDeploy-master.zip上传到/home/hadoop/目录下,然后再进行解压
# 注意:解压后文件夹名为 automaticDeploy-master,需要使用mv命令重命名为 automaticDeploy
[root@node01 hadoop]# unzip automaticDeploy.zip 

# 给予可执行权限
[root@node01 hadoop]# chmod +x /home/hadoop/automaticDeploy/hadoop/* /home/hadoop/automaticDeploy/systems/*

# automaticDeploy文件夹下内容
[root@node01 hadoop]# ls automaticDeploy/
configs.txt  frames.txt  hadoop  host_ip.txt  logs.sh  README.md  systems

以下为 automaticDeploy文件夹下的主要内容:

configs.txt 文件内容如下(这个不用改):

# Mysql相关配置
mysql-root-password DBa2020* END
mysql-hive-password DBa2020* END
mysql-drive mysql-connector-java-5.1.26-bin.jar END
# azkaban相关配置
azkaban-mysql-user root END
azkaban-mysql-password DBa2020* END
azkaban-keystore-password 123456 END

!!!host_ip.txt 文件内容如下(这个需要自己手动修改,这里暂时不用修改):

这个需要配置成自己的3个nodeip,!这里的是未修改的!

192.168.31.41 node01 root 123456
192.168.31.42 node02 root 123456
192.168.31.43 node03 root 123456

farames.txt 文件内容如下(这个不用改):

# 通用环境
jdk-8u144-linux-x64.tar.gz true
azkaban-sql-script-2.5.0.tar.gz true
# Node01
hadoop-2.7.7.tar.gz true node01
# Node02
mysql-rpm-pack-5.7.28 true node02
azkaban-executor-server-2.5.0.tar.gz true node02
azkaban-web-server-2.5.0.tar.gz true node02
presto-server-0.196.tar.gz true node02
# Node03
apache-hive-1.2.1-bin.tar.gz true node03
apache-tez-0.9.1-bin.tar.gz true node03
sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz true node03
yanagishima-18.0.zip true node03
# Muti
apache-flume-1.7.0-bin.tar.gz true node01,node02,node03
zookeeper-3.4.10.tar.gz true node01,node02,node03
kafka_2.11-0.11.0.2.tgz true node01,node02,node03

3.1 安装xshell上传组件 lrzsz (可选)

如果不使用Xshell的话, 使用FinalShell就可以不用安装, FinalShell自带文件上传组件

# 命令 rz :运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
# 命令 sz :将选定的文件发送(send)到本地机器
[root@node01 automaticDeploy]# yum install lrzsz -y

3.2 上传 frames.zip

!上传 frames.zip 压缩包到 ~ 目录下(即/root)

frames.zip 在文章开头有给出下载链接

[root@node01 ~]# cd ~
# 这里需要将frames.zip上传到 ~ 目录(即/root)下,然后再进行解压
[root@node01 ~]# unzip frames.zip -d /home/hadoop/automaticDeploy/

# 注意这里的 IP 需要改成自己设置的node节点IP
[root@node01 ~]# ssh [email protected] "mkdir /home/hadoop"
[root@node01 ~]# ssh [email protected] "mkdir /home/hadoop"

修改 automaticDeploy 文件夹下的 host_ip.txt 文件, 修改结果如下:

!!!这个需要配置成自己的3个nodeip!!!

192.168.192.176 node01 root 123456
192.168.192.177 node02 root 123456
192.168.192.178 node03 root 123456

automaticDeploy 通过scp命令拷贝到 node02node03

注意:这里分别是node02node03的IP地址

# 将修改后的automaticDeploy复制到node02,node03
[root@node01 hadoop]# scp -r /home/hadoop/automaticDeploy/ [email protected]:/home/hadoop/
[root@node01 hadoop]# scp -r /home/hadoop/automaticDeploy/ [email protected]:/home/hadoop/

拷贝完成后, 可以去 node02 , node03 上的 /home/hadoop/ 路径下进行确认

4. 环境搭建04 (集群安装)(需要联网!!!)

恭喜你完成了以上操作, 到这一步正式开始环境搭建

!!! 注意:在三台虚拟机上运行 ./batchOperate.sh 都是需要网络的 ,都是需要下载依赖包的

!!! 注意:运行 ./batchOperate.sh时,需要联网下载依赖包 expecttcl

!!! 否则,执行./installAzkaban.sh安装Azkaban的时候,会出问题,会导致keystore无法生成,

!!! 特别是在Node02Node03上,这两个有一定概率会没有网络,

解决方法在下一篇博客:【入门精讲】数据仓库实战——在 Node02 和 Node03 上没有网络的解决方法

# 分别在node01,node02,node03运行批处理脚本 batchOperate.sh 进行初始化
# 更新yum源, 免密钥登入,安装JDK,配置HOST 
# node01
[root@node01 ~]# cd /home/hadoop/automaticDeploy
[root@node01 automaticDeploy]# cd systems/
[root@node01 systems]# ./batchOperate.sh

# node02
[root@node02 ~]# cd /home/hadoop/automaticDeploy/systems/
[root@node02 systems]# ./batchOperate.sh

# node03
[root@node03 ~]# cd /home/hadoop/automaticDeploy/systems/
[root@node03 systems]# ./batchOperate.sh

验证三台虚拟机是否能够互相免密连接

注意: 每连完一台虚拟机后都要退出, 然后再连接另一台

注:如果不能连接成功,请自行查看 host_ip.txt是否修改,./batchOperate.sh是否运行

# 分别SSH另外两台虚拟机, exit 退出SSH
# 退出示例:  [root@node02 ~]# exit

# node01
[root@node01 systems]# ssh node02
[root@node01 systems]# ssh node03

# node02
[root@node02 systems]# ssh node01
[root@node02 systems]# ssh node03

# node03
[root@node03 systems]# ssh node01
[root@node03 systems]# ssh node02

脚本免密登录失败的话,可以手动进行免密登录操作

# 脚本免密登录失败的话,可以手动进行免密登录操作
# 以下为示例
[root@node01 ~]# ssh-copy-id node02

4.1 安装Hadoop

分别在三台虚拟机上依次执行

/home/hadoop/automaticDeploy/hadoop 路径下

[root@node01 hadoop]# ./installHadoop.sh
[root@node02 hadoop]# ./installHadoop.sh
[root@node03 hadoop]# ./installHadoop.sh

安装完成后, 更新环境变量

[root@node01 hadoop]# source /etc/profile
[root@node02 hadoop]# source /etc/profile
[root@node03 hadoop]# source /etc/profile

node01 上初始化 hadoop, hadoop namenode -format只能执行一次,多次运行的话,出问题

!注意:只在node01上运行

[root@node01 hadoop]# hadoop namenode -format

node01 上启动 hadoop 集群

注意:只在node01上运行

[root@node01 ~]# start-all.sh

jps查看是否运行成功, node01上会有6个进程

[root@node01 ~]# jps
6193 NameNode
6628 SecondaryNameNode
7412 Jps
6373 DataNode
6901 ResourceManager
7066 NodeManager

node02进程

[root@node02 ~]# jps
5952 NodeManager
6565 Jps
5644 DataNode

node03进程

[root@node03 ~]# jps
6596 Jps
5594 DataNode
5902 NodeManager

进行到这一步, hadoop已经安装成功,并且成功运行

可以打开浏览器,访问 node0150070 端口, 进入hadoop的web界面

image-20230327215630657 image-20230327215647962

4.2 安装MYSQL

node02 上安装 MYSQL

[root@node02 hadoop]# ./installMysql.sh

MYSQL安装成功后, 运行MYSQL

[root@node02 hadoop]# mysql -uroot -pDBa2020*

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| azkaban            |
| hive               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)
mysql> exit;

4.3 安装Hive

node03 上安装 Hive, 安装过程会自动安装 Tez

[root@node03 hadoop]# ./installHive.sh

如果是INFO信息报错, 可以不用管

4.4 安装Sqoop

接着在 node03 上安装 Sqoop

[root@node03 hadoop]# ./installSqoop.sh
[root@node03 hadoop]# source /etc/profile

4.5 安装 Presto

分别在node01,node02, node03 上安装 Presto

Presto服务端口为8080

# Presto服务端口为8080
[root@node01 hadoop]# ./installPresto.sh
[root@node02 hadoop]# ./installPresto.sh
[root@node03 hadoop]# ./installPresto.sh

4.6 安装Azkaban

接着分别在node01,node02, node03上安装Azkaban

[root@node01 hadoop]# ./installAzkaban.sh
[root@node02 hadoop]# ./installAzkaban.sh
[root@node03 hadoop]# ./installAzkaban.sh

4.7 安装 Yanagishima

为Presto安装一个插件,带来可视化的效果

Yanagishima服务端口为7080

# Yanagishima服务端口为7080
[root@node03 hadoop]# ./installYanagishima.sh

分别在node01,node02,node03上更新环境变量

# 分别在node01,node02,node03运行更新环境变量
[root@node01 hadoop]# source /etc/profile
[root@node02 hadoop]# source /etc/profile
[root@node03 hadoop]# source /etc/profile

5. 项目流程&数据生成

image-20230320201139893

创建数据库mall

# 导入临时环境变量
[root@node02 hadoop]# export MYSQL_PWD=DBa2020*
[root@node02 hadoop]# mysql -uroot -e "create database mall;"

进入到 /home 目录下

[root@node02 hadoop]# cd ~

上传生成数据脚本到 /root/路径下

数据生成脚本下载链接在文章开头

image-20230327202807444

将数据生成脚本上传到数据库中

[root@node02 ~]# mysql -uroot mall < /root/1建表脚本.sql
[root@node02 ~]# mysql -uroot mall < /root/2商品分类数据插入脚本.sql
[root@node02 ~]# mysql -uroot mall < /root/3函数脚本.sql
[root@node02 ~]# mysql -uroot mall < /root/4存储过程脚本.sql
[root@node02 ~]# mysql
mysql> use mall;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> CALL init_data('2020-08-29',300,200,300,False);
Query OK, 0 rows affected (0.69 sec)

mysql> select count(1) from user_info; 
+----------+
| count(1) |
+----------+
|      200 |
+----------+
1 row in set (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_mall |
+----------------+
| base_category1 |
| base_category2 |
| base_category3 |
| order_detail   |
| order_info     |
| payment_info   |
| sku_info       |
| user_info      |
+----------------+
8 rows in set (0.00 sec)
mysql> exit;

生成了300个订单, 200个用户, 300个商品,False不删除数据

6. ETL数据导入

[root@node03 ~]# mkdir -p /home/warehouse/shell
[root@node03 shell]# cd  /home/warehouse/shell/

# 上传sqoop_import.sh脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim sqoop_import.sh

[root@node03 shell]# chmod +x sqoop_import.sh
[root@node03 shell]# ./sqoop_import.sh all 2020-08-29

运行成功会看见 job_001 —— job_008共8个job任务
注:如果是多次运行的话,job后面的编号会累加

注意:运行./sqoop_import.sh all 2020-08-29可能会遇到报错

/bin/bash^M: 坏的解释器: 没有那个文件或目录

解决方法:请查看文章末,17.常见问题及觉方法

运行成功后:网页可视化查看数据是否导入 http://192.168.192.176:50070/

点击Utilitles 进入 Browse the file system

然后进入 /origin_data/mall/db

image-20230327172816680

一共是8张表, 如果没有8张表的话, 多运行 ./sqoop_import.sh all 2020-08-29 命令几次,直至有8张表

每张表都点进去到最里面,会出现 SUCCESS

导致没有8张表和没有SUCCESS的原因:虚拟机性能不够,内存不够

到这里,表示我们ETL任务已经成功了

7. ODS层创建&数据接入

启动Hive

# 启动Hive 的 hiveserver2
[root@node03 shell]# hive --service hiveserver2 &

如果停止不动的话,回车

启动Hive的metastore服务

# 启动Hive的metastore
[root@node03 shell]# hive --service metastore &

如果停止不动的话,回车

如果这里报错 拒绝连接 , MSQL拒绝连接, 可能由于网络不通畅的问题引起, 在node03上试一下能不能连接到node02 , 连接不了的话可以重启 node02 的网络服务, systemctl restart network

[root@node02 ~]# systemctl restart network

ODS层创建&数据导入

# ODS层创建&数据导入
[root@node03 ~]# cd /home/warehouse
[root@node03 warehouse]# mkdir sql/
[root@node03 warehouse]# cd sql/

# 上传ods_ddl.sql脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 sql]# vim ods_ddl.sql
[root@node03 sql]# hive -f /home/warehouse/sql/ods_ddl.sql

如果停止不动的话,回车

!执行成功的话直接跳到下一步

如果很长时间都没有出结果, 可以 Ctrl + c 终止,然后查看刚刚Hive进行的两个服务

[root@node03 sql]# jps
2378 NodeManager
2133 DataNode
7288 RunJar
7210 RunJar
7646 Jps

# 如果出现以下内容
[root@node03 sql]# jps -m
.
.
.
7288 RunJar       .... /... /... / ....... / hadoop.hive.metastore.HiveMetaStore
.
.
.
# kill metastore服务
[root@node03 sql]# kill -9 7288

# 然后再重启 metastore, metasore服务需要连接mysql服务, 所以需要与node02网络通畅
[root@node03 sql]# hive --service metastore &

# 没有报错,重新执行 hive -f /home/warehouse/sql/ods_ddl.sql
[root@node03 sql]# hive -f /home/warehouse/sql/ods_ddl.sql

hive -f /home/warehouse/sql/ods_ddl.sql执行完后,进入Hive查看, 一共8张表

## 进入hive
[root@node03 shell]# hive
hive>use mall;
OK
Time taken: 0.55 seconds
hive>show tables;
OK
ods_base_category1
ods_base_category2
ods_base_category3
ods_order_detail
ods_order_info
ods_payment_info
ods_sku_info
ods_user_info
Time taken: 1.247 seconds, Fetched: 8 row(s)
hive>exit;

数据有了,然后完成数据的导入

[root@node03 shell]# cd shell/

# 上传obs_db.sh脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim ods_db.sh

[root@node03 shell]# chmod +x ods_db.sh
[root@node03 shell]# ./ods_db.sh 2020-08-29

注意:运行./ods_db.sh 2020-08-29可能会遇到报错

/bin/bash^M: 坏的解释器: 没有那个文件或目录

解决方法:请查看文章末,17.常见问题及解决方法

执行完成后,进入Hive查看数据是否导入

## 进入hive
[root@node03 shell]# hive
hive> use mall;
OK
Time taken: 0.55 seconds
hive> show tables;
hive> select count(1) from ods_user_info; 
Query ID = root_20230327220623_2ce7b554-c007-4d37-b282-87a3227c2f16
Total jobs = 1
Launching Job 1 out of 1


Status: Running (Executing on YARN cluster with App id application_1679925264749_0002)

--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ..........   SUCCEEDED      2          2        0        0       0       0
Reducer 2 ......   SUCCEEDED      1          1        0        0       0       0
--------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 7.56 s     
--------------------------------------------------------------------------------
OK
200
Time taken: 9.383 seconds, Fetched: 1 row(s)
# 200条数据
hive> exit;

8. DWD层创建&数据接入

创建并执行dwd_ddl.sql

[root@node03 shell]# cd /home/warehouse/sql/

# 上传dwd_ddl.sql脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 sql]# vim dwd_ddl.sql

[root@node03 warehouse]# hive -f /home/warehouse/sql/dwd_ddl.sql

创建并执行dwd_db.sh

[root@node03 shell]# cd /home/warehouse/shell/

# 上传dwd_db.sh脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim dwd_db.sh
[root@node03 shell]# chmod +x dwd_db.sh
[root@node03 shell]# ./dwd_db.sh 2020-08-29

注意:运行./dwd_db.sh 2020-08-29可能会遇到报错

/bin/bash^M: 坏的解释器: 没有那个文件或目录
解决方法:请查看文章末,17.常见问题及解决方法

执行完成后,进入Hive查看数据是否接入

## 进入hive
[root@node03 shell]# hive
hive>use mall;
hive> show tables;
OK
dwd_order_detail
dwd_order_info
dwd_payment_info
dwd_sku_info
dwd_user_info
dws_sale_detail_daycount
dws_user_action
ods_base_category1
ods_base_category2
ods_base_category3
ods_order_detail
ods_order_info
ods_payment_info
ods_sku_info
ods_user_info
Time taken: 0.25 seconds, Fetched: 15 row(s)

hive>select * from dwd_sku_info where dt='2020-08-29' limit 2;
OK
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
1005    809     897     yOBnLRZwkMelSEscgCqY    WKMEMUmBWcwdaTrdsCJLJUIFaldKps  4.47    36      703     70      12      待产护理        妈妈专区        母婴    2020-08-29 14:55:39.0   2020-08-29
1009    283     3827    YEZiTSLYKJbooDbvZMMx    cReVrXNVoJsRjsmifcWyCtmdDKOOED  0.83    69      928     98      16      汽修工具        维修保养        汽车用品        2020-08-29 21:11:59.02020-08-29
Time taken: 0.711 seconds, Fetched: 2 row(s)
hive> exit;

9. DWS层创建&数据接入

创建并执行dws_ddl.sql

# DWS层创建&数据接入 node03
[root@node03 shell]# cd /home/warehouse/sql/

# 上传dws_ddl.sql脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim dws_ddl.sql
[root@node03 sql]# hive -f /home/warehouse/sql/dws_ddl.sql

创建并执行dws_db.sh

[root@node03 sql]# cd ../shell/

# 上传dws_db.sh脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim dws_db.sh
[root@node03 shell]# chmod +x dws_db.sh
[root@node03 shell]# ./dws_db.sh 2020-08-29

注意:运行./dws_db.sh 2020-08-29可能会遇到报错

/bin/bash^M: 坏的解释器: 没有那个文件或目录
解决方法:请查看文章末,17.常见问题及解决方法

执行完成后,进入Hive查看数据是否接入

[root@node03 shell]# hive
hive> use mall;
hive> show databases;
hive> select * from dws_user_action where dt="2020-08-29" limit 2;
OK
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
1       3       1593    2       665     2020-08-29
10      1       434     1       434     2020-08-29
Time taken: 0.35 seconds, Fetched: 2 row(s)
#  !!! 注意这里的SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder不用管

hive> exit;

10. ADS层复购率统计

创建并执行ads_sale_ddl.sql

# ADS层复购率统计 node03
[root@node03 shell]# cd /home/warehouse/sql/

# 上传ads_sale_ddl.sql脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 sql]# vim ads_sale_ddl.sql
[root@node03 sql]# hive -f /home/warehouse/sql/ads_sale_ddl.sql

创建并执行ads_sale.sh

[root@node03 sql]# cd /home/warehouse/shell/

# 上传ads_sale.sh脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim ads_sale.sh

[root@node03 shell]# chmod +x ads_sale.sh
[root@node03 shell]# ./ads_sale.sh 2020-08-29
[root@node03 shell]# hive
hive> use mall;
hive> exit;

11. ADS层数据导出

创建并执行mysql_sale.sql

# ADS层数据导入 
# node02
[root@node02 ~]# mkdir -p /home/warehouse/sql
[root@node02 ~]# cd /home/warehouse/sql/

# 上传mysql_sale.sql脚本(所有脚本文件均有提供链接),或者手动编写
[root@node02 sql]# vim mysql_sale.sql
[root@node02 sql]# export MYSQL_PWD=DBa2020*
[root@node02 sql]# mysql -uroot mall < /home/warehouse/sql/mysql_sale.sql
[root@node02 sql]# mysql
mysql> use mall;
mysql> show tables;
+-------------------------------+
| Tables_in_mall                |
+-------------------------------+
| ads_sale_tm_category1_stat_mn |
| base_category1                |
| base_category2                |
| base_category3                |
| order_detail                  |
| order_info                    |
| payment_info                  |
| sku_info                      |
| user_info                     |
+-------------------------------+
9 rows in set (0.00 sec)
mysql> exit;

创建并执行sqoop_export.sh

# node03
[root@node03 ~]# cd /home/warehouse/shell/

# 上传sqoop_export.sh脚本(所有脚本文件均有提供链接),或者手动编写
[root@node03 shell]# vim sqoop_export.sh

[root@node03 shell]# chmod +x sqoop_export.sh
[root@node03 shell]# ./sqoop_export.sh all

如果这里报错 拒绝连接 MYSQLIO的问题, 一般这个拒绝连接错误都是MYSQL的问题, 可能由于网络不通畅的问题引起, 重启 node02 的网络服务可以解决, systemctl restart network

# node02
[root@node02 sql]# systemctl restart network

查看数据是否能够导出

[root@node02 sql]# mysql -uroot -pDBa2020*
mysql> use mall;
mysql> select * from ads_sale_tm_category1_stat_mn;
+-------+--------------+----------------+----------+----------------+----------------------+-----------------+-----------------------+---------+------------+
| tm_id | category1_id | category1_name | buycount | buy_twice_last | buy_twice_last_ratio | buy_3times_last | buy_3times_last_ratio | stat_mn | stat_date  |
+-------+--------------+----------------+----------+----------------+----------------------+-----------------+-----------------------+---------+------------+
| NULL  | NULL         | NULL           | 158      | 141            | 0.89                 | 107             | 0.79                  | 2020-08 | 2020-08-29 |
| NULL  | NULL         | NULL           | 284      | 256            | 0.9                  | 207             | 0.81                  | 2020-08 | 2020-08-30 |
+-------+--------------+----------------+----------+----------------+----------------------+-----------------+-----------------------+---------+------------+
2 rows in set (0.00 sec)

mysql> exit;

12. Azkaban自动化调度

Azkaban自动化调度, 生成数据

生成了300个订单, 200个用户, 300个商品,False不删除数据

# Azkaban自动化调度
# 生成数据
[root@node02 sql]# mysql -uroot -pDBa2020*
mysql> use mall;
mysql> CALL init_data('2020-08-30',300,200,300,FALSE);
Query OK, 0 rows affected (0.70 sec)

三个节点启动Azkaban

# 三个节点启动Azkaban
[root@node01 ~]# azkaban-executor-start.sh
[root@node02 ~]# azkaban-executor-start.sh
[root@node03 ~]# azkaban-executor-start.sh

# 部分输出结果
[AzkabanExecutorServer] [Azkaban] Azkaban Executor Server started on port 12321

# azkaban出问题时,可以重启, 关闭命令如下
# 重启命令 azkaban-executor-shutdown.sh

终端输出INFO信息,不用管,回车继续输入命令

接下来启动Azkaban的web网页 azkaban-web-start.sh, 然后打开 https://192.168.192.178:8443/,可能会有:您的连接不是私密连接 不用管

!!!继续前往!坚持访问!

不安全?不存在的!

# node03 启动Azkaban的web网页
# 准备mall_job.zip
[root@node03 shell]# cd /opt/app/azkaban/server/
[root@node03 server]# azkaban-web-start.sh

进入Azkaban的web网页后,准备好mall_job.zip,创建mall project, 上传 mall_job.zip

注意:

# https://192.168.192.178:8443/         # node03 注意这里是https
# Azkaban:
# 账号:admin
# 密码:admin
# 创建project mall
# 设置参数 dt 2020-08-30
# 设置参数 useExecutor node03

QQ图片20230402123840

img

i5465mg

20230402123936

QQ图片20230402124011

# 等自动化调度任务执行完后
# 到node02查看执行情况,新建一个node02连接终端
[root@node02 ~]# mysql -uroot -pDBa2020*
mysql> use mall;
mysql> select * from ads_sale_tm_category1_stat_mn;

13. 结果展示

image-20230321203237750 image-20230321203336576

14. 课后作业

image-20230321195450264

15. 更换IP后所需要做的操作

# 更改虚拟机静态IP地址
# 更改host_ip.txt
cd /home/hadoop/automaticDeploy/
vim host_ip.txt
systemctl restart network

source /etc/profile

16. 重启虚拟机后的常用操作

# 网络不通畅时,运行 systemctl restart network 重启网卡
# 修改虚拟机IP, vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
# http://192.168.192.176:50070/        # hadoop Web可视化网页   运行在node01上
# https://192.168.192.178:8443/        # Azkaban web可视化网页  运行在node03上 注意这里是https
# http://192.168.192.176:8088/         # hadoop 另一个可视化页面 运行在node01上
# Azkaban:
# 账号:admin 密码:admin
# 创建project mall
# 设置参数 dt 2020-08-30
# 设置参数 useExecutor node03

# !!!初始化(格式化)hadoop,最开始的时候执行一次就行,不要多次执行 !!!
# !!!如果是安好教程一步一步来的话,这里不要执行!!!
# !!!这里不要执行
[root@node01 hadoop]# hadoop namenode -format


# 初始化过从这里开始
# 启动hadoop集群
[root@node01 ~]# start-all.sh

# 启动Hive 的 hiveserver2
[root@node03 shell]# hive --service hiveserver2 &

# 启动Hive 的 metastore
[root@node03 shell]# hive --service metastore &

# 生成数据 生成过就不用生成了
[root@node02 sql]# mysql -uroot -pDBa2020*
mysql> use mall;
mysql> CALL init_data('2020-08-30',300,200,300,FALSE);
# 生成了300个订单, 200个用户, 300个商品,False不删除数据 

# 准备好mall_job.zip
# 三个节点启动Azkaban
[root@node01 ~]# azkaban-executor-start.sh
[root@node02 ~]# azkaban-executor-start.sh
[root@node03 ~]# azkaban-executor-start.sh
[AzkabanExecutorServer] [Azkaban] Azkaban Executor Server started on port 12321


# azkaban出问题时,可以重启, 关闭命令如下
# 重启命令 azkaban-executor-shutdown.sh

# node03 启动Azkaban的web网页
[root@node03 shell]# cd /opt/app/azkaban/server/
[root@node03 server]# azkaban-web-start.sh

# https://192.168.192.178:8443/         # node03 注意这里是https
# Azkaban:
# 账号:admin
# 密码:admin
# 创建project mall
# 设置参数 dt 2020-08-30
# 设置参数 useExecutor node03

17. 常见问题及解决方法(未完持续更新中,欢迎补充!)

欢迎大家在搭建数据仓库的遇到的问题在评论区下方提出,也可以补充在下面

17.1 Finalshell连接不上虚拟机

  1. 其他的虚拟机能连接成功,但是有一台无法连接,

    • 重新这台虚拟机网卡: systemctl restart network
  2. 三台虚拟机都连接不上

    • 首先检查IP地址是否设置成功
    • 重新启动虚拟机网卡: systemctl restart network
    • 重新启动虚拟机

17.2 /bin/bash^M: 坏的解释器: 没有那个文件或目录

相应问题及解决方法:https://blog.csdn.net/qq_56870570/article/details/120182874

/bin/bash^M: 坏的解释器: 没有那个文件或目录

运行 sed ‘s/\r//’ -i 你所运行的文件脚本.sh (注意:这里为英文的单引号)

或者 :

使用 vim 重新编辑脚本

在底行模式下输入 set ff=unix 然后回车

17.3 拒接连接 坏的路由器

重启网络 systemctl restart network

17.4 VMware 运行 systemctl restart network失败

软件问题,请使用Virtual box

所提供的OVA镜像中是由两个网卡,网卡1:桥接网卡,网卡2:网络地址转换NAT

VMware中默认只有一个网卡,将OVA镜像文件导入后可能有问题

17.5 在 Node02 和 Node03 上没有网络 使用 ping www.baidu.com无法ping通 的解决方法

解决方法博客连接在 Node02 和 Node03 上没有网络 使用 ping www.baidu.com也无法ping通 的解决方法

17.6 不小心多次运行 hadoop namenode -format,DataNode或NameNode没有启动

多次重新初始化hadoop namenode -format后,DataNode或NameNode没有启动

解决方法博客连接不小心多次运行 hadoop namenode -format,DataNode或NameNode没有启动

17.7 关于运行start-all.sh 显示node01 permission denie

启动start-all.sh需要输入node01结点的密码,然后卡住

原因是:没有成功配置免密,运行batchoperate.sh时需要联网运行,它会从网络上下载expecttcl依赖

解决方法:参考17.5去配置网络,重新运行batchoperate.sh

17.8 关于运行azkaban-executor-start.sh卡住,找不到keystore或显示需要输入password

解决方法:参考 17.7,然后重新运行 ./installAzkaban.sh

17.9 主机IP地址发生改变,导致连接不上三台虚拟机

解决方法1:

  • 重新修改三台虚拟机的静态IP地址,还要重新配置免密登录,此操作较麻烦,建议第二种方法

解决方法2:

作者:Oraer

都看到最后了,不点个赞+收藏吗?

R-C
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_54056489/article/details/129806638

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线

推荐文章

热门文章

相关标签