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

07-03 749阅读

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

文章目录

  • 0. B站相关课程链接 和 搭建数据仓库资源及脚本下载
  • 食用指南:建议先把博客整体看一遍之后再进行操作
  • 文章最后有常见问题及解决方法
  • 1. 项目介绍及整体流程
    • 1.1项目介绍
    • 1.2 数据仓库架构
    • 1.3 环境规划
    • 1.4 整体开发流程
    • 2. 环境准备01-02(虚拟机和FinalShell或Xshell)
      • 2.1 软件下载
      • 2.2 安装Virtual Box及导入OVA镜像
      • 2.3 修改虚拟机静态IP地址
      • 2.4 使用远程连接工具FinalShell连接虚拟机node节点
      • 3. 环境搭建03 (脚本准备)
        • 3.1 安装xshell上传组件 lrzsz (可选)
        • 3.2 上传 frames.zip
        • 4. 环境搭建04 (集群安装)(需要联网!!!)
          • 4.1 安装Hadoop
          • 4.2 安装MYSQL
          • 4.3 安装Hive
          • 4.4 安装Sqoop
          • 4.5 安装 Presto
          • 4.6 安装Azkaban
          • 4.7 安装 Yanagishima
          • 5. 项目流程&数据生成
          • 6. ETL数据导入
          • 7. ODS层创建&数据接入
          • 8. DWD层创建&数据接入
          • 9. DWS层创建&数据接入
          • 10. ADS层复购率统计
          • 11. ADS层数据导出
          • 12. Azkaban自动化调度
          • 13. 结果展示
          • 14. 课后作业
          • 15. 更换IP后所需要做的操作
          • 16. 重启虚拟机后的常用操作
          • 17. 常见问题及解决方法(未完持续更新中,欢迎补充!)
            • 17.1 Finalshell连接不上虚拟机
            • 17.2 /bin/bash^M: 坏的解释器: 没有那个文件或目录
            • 17.3 拒接连接 坏的路由器
            • 17.4 VMware 运行 systemctl restart network失败
            • 17.5 在 Node02 和 Node03 上没有网络 使用 ping www.baidu.com无法ping通 的解决方法
            • 17.6 不小心多次运行 hadoop namenode -format,DataNode或NameNode没有启动
            • 17.7 关于运行start-all.sh 显示node01 permission denie
            • 17.8 关于运行azkaban-executor-start.sh卡住,找不到keystore或显示需要输入password
            • 17.9 主机IP地址发生改变,导致连接不上三台虚拟机

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

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

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

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

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

              下载连接:

              数据仓库的课件:

              链接:百度网盘链接1

              提取码:d3a9

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

              链接:百度网盘链接2

              提取码:fwpq

              数据仓库的automaticDeploy项目代码:

              链接:百度网盘链接3

              提取码:7nff

              备用链接:

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

              链接: 百度网盘链接4

              提取码:ik61

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

              OneDrive链接

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

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

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

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

              1. 项目介绍及整体流程

              1.1项目介绍

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

              1.2 数据仓库架构

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

              1.3 环境规划

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

              1.4 整体开发流程

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

              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就行,可以更改安装路径

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

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

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

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

                node02,node03同样的操作

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

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

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

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

                然后可以开启虚拟机了

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

                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地址后,分别对三台虚拟机node01、node02、node03进行修改

                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

                !!!node02和node03中的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,node02,node03有GATEWAY

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

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

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

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

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

                这里使用 FinalShell SSH连接虚拟机

                node01配置如下, node02和node03同理

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

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

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

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

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

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

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

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

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

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

                点击 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个node的ip,!这里的是未修改的!

                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 root@192.168.192.177 "mkdir /home/hadoop"
                [root@node01 ~]# ssh root@192.168.192.178 "mkdir /home/hadoop"
                

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

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

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

                将 automaticDeploy 通过scp命令拷贝到 node02 ,node03

                注意:这里分别是node02和node03的IP地址

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

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

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

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

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

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

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

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

                解决方法在下一篇博客:【入门精讲】数据仓库实战——在 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已经安装成功,并且成功运行

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

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

                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. 项目流程&数据生成

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

                创建数据库mall

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

                进入到 /home 目录下

                [root@node02 hadoop]# cd ~
                

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

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

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

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

                [root@node02 ~]# mysql -uroot mall  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下

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

                一共是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  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
                

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

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

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

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

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

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

                13. 结果展示

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

                14. 课后作业

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

                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
                  • 三台虚拟机都连接不上

                    • 首先检查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时需要联网运行,它会从网络上下载expect和 tcl依赖

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

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

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

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

                解决方法1:

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

                  解决方法2:

                  • 记住你之前设置虚拟机静态IP地址时的主机电脑的IP,然后进行修改主机IP地址
                  • 请参考博客: 如何设置主机电脑静态IP地址

                    作者:Oraer

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

                    超详细【入门精讲】数据仓库原理&实战 一步一步搭建数据仓库 内附相应实验代码和镜像数据和脚本
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]