搭建一套分布式数据仓库系统
MySQL
安装版本为 8.0.35-0ubuntu0.20.04.1
Hadoop–分布式文件系统,分布式集群的方式搭建
安装版本为 3.0.0
###配置ssh
- sudo service ssh start #启动ssh服务
- ssh-keygen -t rsa #生成秘钥文件,一路回车
- touch ~/.ssh/authorized_keys
- cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
- ssh localhost #不需要密码就可以登录视为成功
复制代码 * 最后一步出现登录还是需要密码的情况
http://t.csdnimg.cn/HPmtZ
进入当前用户的家目次下,.ssh/文件夹内的四个文件权限有严格要求:使用chmod更改权限。
id_rsa:私钥,相当于"锁"。文件权限:600,不能更改。
id_rsa.pub:公钥,相当于"钥匙"。文件权限:644,不能更改。
authorized_keys:认证文件,记录"别人"(即:对端)给你的公钥“钥匙”。文件权限:600,不能更改。
known_hosts:“指纹”文件,记录初次SSH互信认证"别人"(即:对端)留给你的“指纹”信息。文件权限:600,不能更改。
Sqoop–数据采集工具
安装版本为 1.4.7
Hive–数据仓库管理工具
安装版本为2.3.5
Dolphinscheduler–调度工具
1 官方文档(伪集群部署)
以官方文档的安装流程为主,以下是我安装过程中踩的各种坑和以为需要留意的点
https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/pseudo-cluster
2. 安装要求
2.1 jdk
JDK:下载JDK (1.8|),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目次追加到 PATH 环境变量中。
2.2 安装包
下载DolphinScheduler二进制包
https://www.apache.org/dyn/closer.lua/dolphinscheduler/3.2.0/apache-dolphinscheduler-3.2.0-bin.tar.gz
- tar -zxvf apache-dolphinscheduler-3.2.0-bin.tar.gz
复制代码 解压出来后,可以使用pwd命令查察安装路径,反面要用
2.3 数据库
数据库:MySQL (5.7|) Driver 8.0 Driver 8.0.16下载
https://downloads.mysql.com/archives/c-j/
Product Version:8.0.16
Operating System latform Independent
下载 Platform Independent (Architecture Independent), Compressed TAR Archive 这个包
解压出来后选择内里的.jar文件
将 mysql-connector-java-8.0.16.jar 驱动复制到dolphinscheduler安装目次下master-server、worker-server、alert-server、api-server、tools目次下的libs目次(留意是libs内里)。
2.4注册中央
ZooKeeper (3.4.6|)
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz
3 准备 DolphinScheduler 启动环境
3.1 配置用户免密及权限
创建部署用户,并且一定要配置 sudo 免密。
以创建 dolphinscheduler 用户为例
- # 创建用户需使用 root 登录
- useradd dolphinscheduler
- # 添加密码
- echo "dolphinscheduler" | passwd --stdin dolphinscheduler
- # 配置 sudo 免密
- sed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers
- sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
- # 修改目录权限,使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限
- chown -R dolphinscheduler:dolphinscheduler [安装路径!!!]/apache-dolphinscheduler-*-bin
复制代码 3.2 配置呆板SSH免密登岸
由于安装的时间需要向差别呆板发送资源,所以要求各台呆板间能实现SSH免密登岸。配置免密登岸的步骤如下
- su dolphinscheduler # 一定要切换到这个用户下!!!
复制代码 linux新建用户后终端不显示用户名
以下是解决方法:
编辑/etc/passwd文件。使用文本编辑器(如vi)打开该文件,找到对应的新建用户条目,并将最反面的/bin/sh更换为/bin/bash。然后生存更改并退出编辑器。
找到新建用户的那一行,将/bin/sh改为/bin/bash。
在新建用户的家目次下~/.bashrc中参加如下内容:
使环境变量见效
- ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
- cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
- chmod 600 ~/.ssh/authorized_keys
复制代码 可以使用ls -l命令查察文件的权限和全部者,此处的家目次应为/home/dolphinscheduler,权限同上,全部者为dolphinscheduler。
配置完成后,可以通过运行命令 ssh localhost 判定是否成功,假如不需要输入密码就能ssh登岸则证明成功
3.3 启动zookeeper
进入 zookeeper 的安装目次,将 zoo_sample.cfg 配置文件复制到 conf/zoo.cfg,并将 conf/zoo.cfg 中 dataDir 中的值改成 dataDir=./tmp/zookeeper
- 启动 zookeeper
- ./bin/zkServer.sh start
复制代码 3.4 修改相关配置
完成底子环境的准备后,需要根据你的呆板环境修改配置文件。配置文件可以在软件安装目次 bin/env 中找到,他们分别为install_env.sh 和 dolphinscheduler_env.sh。
- 修改 install_env.sh 文件
文件 install_env.sh 形貌了哪些呆板将被安装 DolphinScheduler 以及每台呆板对应安装哪些服务。您可以在路径 bin/env/install_env.sh 中找到此文件,更改env变量,配置详情如下。
- ips="localhost"
- sshPort="22"
- masters="localhost"
- workers="localhost:default"
- alertServer="localhost"
- apiServers="localhost"
- installPath=~/dolphinscheduler
- deployUser="dolphinscheduler"
复制代码
- 修改 dolphinscheduler_env.sh 文件
文件 ./bin/env/dolphinscheduler_env.sh 形貌了下列配置:
DolphinScheduler 的数据库配置
一些任务类型外部依赖路径或库文件,如 JAVA_HOME
注册中央zookeeper
必须更改 JAVA_HOME、注册中央和数据库相关配置。
对照着开头找,此处只改了必须改的配置,假如需要毗连其他,则需要自己更改(看官方文档去)
- export JAVA_HOME=[实际java的地址]
- export DATABASE=${DATABASE:-mysql}
- export SPRING_DATASOURCE_UR:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true""
- export SPRING_DATASOURCE_USERNAME=dolphinscheduler
- export SPRING_DATASOURCE_PASSWORD=dolphinscheduler
复制代码 3.5 初始化数据库
切换到DolphinScheduler安装目次,执行
- bash tools/bin/upgrade-schema.sh
复制代码 4 启动 DolphinScheduler
!!!使用上面创建的部署用户dolphinscheduler!!!运行以下命令完成部署,部署后的运行日志将存放在 logs 文件夹内
登录 DolphinScheduler
浏览器访问所在 http://localhost:12345/dolphinscheduler/ui 即可登录系统UI。默认的用户名和密码是 admin/dolphinscheduler123
- 启停服务
- # 一键停止集群所有服务
- bash ./bin/stop-all.sh
- # 一键开启集群所有服务
- bash ./bin/start-all.sh
- # 启停 Master
- bash ./bin/dolphinscheduler-daemon.sh stop master-server
- bash ./bin/dolphinscheduler-daemon.sh start master-server
- # 启停 Worker
- bash ./bin/dolphinscheduler-daemon.sh start worker-server
- bash ./bin/dolphinscheduler-daemon.sh stop worker-server
- # 启停 Api
- bash ./bin/dolphinscheduler-daemon.sh start api-server
- bash ./bin/dolphinscheduler-daemon.sh stop api-server
- # 启停 Alert
- bash ./bin/dolphinscheduler-daemon.sh start alert-server
- bash ./bin/dolphinscheduler-daemon.sh stop alert-server
复制代码 Superset安装
1 前期准备
1.1 安装环境软件
- apt-get update
- apt install gcc
- apt-get install --reinstall build-essential
复制代码 1.2 python环境
使用anaconda创建python环境
- conda create --name superset python=3.8
- conda activate superset
复制代码 2 安装superset
- pip install apache-superset -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
复制代码 3 初始化数据库,解决报错
报错:http://t.csdnimg.cn/2Pz7a
- 错误一:You did not provide the “FLASK_APP” environment variable
解决方法:
- export FLASK_APP=superset
复制代码
- 错误二:Refusing to start due to insecure SECRET_KEY
解决方法:
进入superet的安装目次下。输入vim superset_config.py增长配置文件
(留意!!! superset_config.py文件原先是没有的,得自己创建)
在superset_config.py文件下添加以下内容:
- # Superset specific config
- # SS 相关的配置
- # 行数限制 5000 行
- ROW_LIMIT = 5000
-
- # 网站服务器端口 8088,该端口被Hadoop占用,改为其他端口比如18088
- SUPERSET_WEBSERVER_PORT = 8096
-
- # Flask App Builder configuration
- # Your App secret key will be used for securely signing the session cookie
- # and encrypting sensitive information on the database
- # Make sure you are changing this key for your deployment with a strong key.
- # You can generate a strong key using `openssl rand -base64 42`
- # Flask 应用构建器配置
- # 应用密钥用来保护会话 cookie 的安全签名
- # 并且用来加密数据库中的敏感信息
- # 请确保在你的部署环境选择一个强密钥
- # 可以使用命令 openssl rand -base64 42 来生成一个强密钥
-
- SECRET_KEY = "ZT2uRVAMPKpVkHM/QA1QiQlMuUgAi7LLo160AHA99aihEjp03m1HR6Kg"
-
- # The SQLAlchemy connection string to your database backend
- # This connection defines the path to the database that stores your
- # superset metadata (slices, connections, tables, dashboards, ...).
- # Note that the connection information to connect to the datasources
- # you want to explore are managed directly in the web UI
- # SQLAlchemy 数据库连接信息
- # 这个连接信息定义了 SS 元数据库的路径(切片、连接、表、数据面板等等)
- # 注意:需要探索的数据源连接及数据库连接直接通过网页界面进行管理
- #SQLALCHEMY_DATABASE_URI = 'sqlite:path/to/superset.db'
-
- # Flask-WTF flag for CSRF
- # 跨域请求攻击标识
- WTF_CSRF_ENABLED = True
-
- # Add endpoints that need to be exempt from CSRF protection
- # CSRF 白名单
- WTF_CSRF_EXEMPT_LIST = []
-
- # A CSRF token that expires in 1 year
- # CSFR 令牌过期时间 1 年
- WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365
- # Set this API key to enable Mapbox visualizations
- # 接口密钥用来启用 Mapbox 可视化
- MAPBOX_API_KEY = ''
复制代码 添加之后,在/etc/profile 文件中参加以下命令,然后见效以下配置
- export SUPERSET_CONFIG_PATH=[绝对路径!!!]/superset_config.py
复制代码
- 错误三:ModuleNotFoundError: No module named ‘marshmallow_enum’
解决方法:
- pip install marshmallow_enum -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
复制代码 4 创建用户名和密码
创建用户名和密码的目的:superset使用的就是flask框架,flask是一个python web框架,登录需要用户名和密码
在/bin目次下,使用以下命令来创建用户名和密码:
- python superset fab create-admin
复制代码 用户名:root
密码:123456
(按照显示来设置用户名和密码)
5 使用superset
安装gunicorn
gunicorn是一个Python Web Server,可以和java中的Tomcat类比
- pip install gunicorn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
复制代码 启动Superset
启动时确定8787端口未被占用
- gunicorn --workers 5 --timeout 120 --bind localhost:8787 "superset.app:create_app()" --daemon
- --workers:指定进程个数
- --timeout:worker进程超时时间,超时会自动重启
- --bind:绑定本机地址,即为Superset访问地址
- --daemon:后台运行
复制代码 登录Superset
访问 http://127.0.0.1:8787/login/ ,并使用第四节中创建的管理员账号举行登录
在~/anaconda3/envs/superset/bin中vimsuperset.sh
- # 启动 Superset
- superset.sh start
- # 停止 Superset
- superset.sh stop
复制代码- #!/bin/bashsuperset_status(){ result=`ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l` if [[ $result -eq 0 ]]; then return 0 else return 1 fi}superset_start(){ source ~/.bashrc
- superset_status >/dev/null 2>&1 if [[ $? -eq 0 ]]; then #需要修改启动代码 conda activate superset ; gunicorn --workers 5 --timeout 120 --bind localhost:8787 "superset.app:create_app()" --daemon else echo "superset 正在运行" fi}superset_stop(){ superset_status >/dev/null 2>&1 if [[ $? -eq 0 ]]; then echo "superset 未在运行" else ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9 fi}case $1 in start ) echo "启动 Superset" superset_start ;; stop ) echo "制止 Superset" superset_stop ;; restart ) echo "重启 Superset" superset_stop superset_start ;; status ) superset_status >/dev/null 2>&1 if [[ $? -eq 0 ]]; then echo "superset 未在运行" else echo "superset 正在运行" fiesac
复制代码 数据仓库建设
数据模拟
user_idnameemail1张三zhangsan@example.com2李四lisi@example.com3王五wangwu@example.com4赵六zhaoliu@example.com5钱七qianqi@example.com product_idcategorynameprice1电子产物手机3000.002家居用品沙发8000.003图书小说50.004服装T恤200.005电子产物电脑5000.006食品巧克力10.007图书课本30.00 iduser_idproduct_idquantityorder_date11752023-06-29 00:00:0025452023-07-10 00:00:0034242023-07-17 00:00:0043542023-08-03 00:00:00……………472352023-11-09 00:00:00484612023-06-12 00:00:00495142023-12-06 00:00:00503742023-06-02 00:00:00 数据采集
mysql --sqoop–> hive(hadoop)
- #users
- sqoop import --connect jdbc:mysql://localhost/purchase --username root --password 123456 --table users --target-dir /user/hive/warehouse/purchase.db/users --delete-target-dir --fields-terminated-by ',' --hive-import --hive-table purchase.users --columns "user_id,name,email" -m 1
- #products
- sqoop import --connect jdbc:mysql://localhost/purchase --username root --password 123456 --table products --target-dir /user/hive/warehouse/purchase.db/products --delete-target-dir --fields-terminated-by ',' --hive-import --hive-table purchase.products --columns "product_id,category,name,price" -m 1
- # orders
- sqoop import --connect jdbc:mysql://localhost/purchase --username root --password 123456 --table orders --target-dir /user/hive/warehouse/purchase.db/orders --delete-target-dir --fields-terminated-by ',' --hive-import --hive-table purchase.orders --columns "id,user_id,product_id,quantity,order_date" -m 4
复制代码 分层计划
ODS(原始数据层):
用户表(users):包含用户ID、姓名和邮箱所在。
商品表(products):包含商品ID、分类、名称和价格。
订单表(orders):包含订单ID、用户ID、商品ID、数目和订单日期。
数据界说部分
DIM(维度表):
用户维度表(user_dim):包含用户ID、姓名和邮箱所在。
- CREATE TABLE user_dim (
- user_id INT,
- name STRING,
- email STRING
- )ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
复制代码 商品维度表(product_dim):包含商品ID、分类、名称和价格。
- CREATE TABLE product_dim (
- product_id INT,
- category STRING,
- name STRING,
- price DOUBLE
- )
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
复制代码 DWD(明细数据层):
订单明细表(order_detail):包含订单ID、用户ID、商品ID、数目和订单日期。
- CREATE TABLE order_detail (
- order_id INT,
- user_id INT,
- product_id INT,
- quantity INT,
- order_date STRING
- )
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
复制代码 数据导入
- INSERT INTO purchase.user_dim (user_id, name, email)
- SELECT user_id, name, email FROM purchase.users;
- INSERT INTO purchase.product_dim (product_id, category, name, price)
- SELECT product_id, category, name, price FROM purchase.products;
- INSERT INTO purchase.order_detail (order_id, user_id, product_id, quantity, order_date)
- SELECT id, user_id, product_id, quantity, order_date FROM purchase.orders;
复制代码 shell脚本
- hive -e "DELETE FROM purchase.user_dim;INSERT INTO purchase.user_dim (user_id, name, email) SELECT user_id, name, email FROM purchase.users;"
- hive -e "DELETE FROM purchase.product_dim;INSERT INTO purchase.product_dim (product_id, category, name, price) SELECT product_id, category, name, price FROM purchase.products;"
- hive -e "DELETE FROM purchase.order_dim;INSERT INTO purchase.order_detail (order_id, user_id, product_id, quantity, order_date) SELECT id, user_id, product_id, quantity, order_date FROM purchase.orders;"
复制代码 DWS(汇总数据层):
订单统计表(order_stats):(order_stats):包含用户ID、姓名、商品ID、商品名称、商品分类、总销售数目和总销售额。
建表
- CREATE TABLE order_stats (
- user_id INT,
- name STRING,
- product_id INT,
- product_name STRING,
- category STRING,
- total_sales_quantity INT,
- total_sales_amount DOUBLE
- )
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
复制代码 导入
- INSERT INTO purchase.order_stats
- SELECT u.user_id, u.name, p.product_id, p.name AS product_name, p.category, SUM(od.quantity) AS total_quantity, SUM(od.quantity * p.price) AS total_sales
- FROM purchase.user_dim u
- JOIN purchase.order_detail od ON u.user_id = od.user_id
- JOIN purchase.product_dim p ON od.product_id = p.product_id
- GROUP BY u.user_id, u.name, p.product_id, p.name, p.category;
复制代码 shell脚本
- hive -e "DELETE FROM purchase.order_stats;INSERT INTO purchase.order_stats SELECT u.user_id, u.name, p.product_id, p.name AS product_name, p.category, SUM(od.quantity) AS total_quantity, SUM(od.quantity * p.price) AS total_sales FROM purchase.user_dim u JOIN purchase.order_detail od ON u.user_id = od.user_id JOIN purchase.product_dim p ON od.product_id = p.product_id GROUP BY u.user_id, u.name, p.product_id, p.name, p.category;"
复制代码 ADS(应用数据层):
建表
用户购买统计表(user_purchase_stats):包含用户ID、用户名、总购买数目和总购买额。
商品销售统计表(product_sales_stats):包含商品ID、商品名称、总销售数目和总销售额。
分类销售统计表(category_sales_stats):包含商品类名、总销售数目和总销售额。
- -- 创建用户购买统计表
- CREATE TABLE user_purchase_stats (
- user_id INT,
- name STRING,
- total_quantity INT,
- total_sales DOUBLE
- )
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
- -- 创建商品销售统计表
- CREATE TABLE product_sales_stats (
- product_id INT,
- product_name STRING,
- total_quantity INT,
- total_sales DOUBLE
- )
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
- -- 创建分类销售统计表
- CREATE TABLE category_sales_stats (
- category STRING,
- total_quantity INT,
- total_sales DOUBLE
- )
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
- STORED AS TEXTFILE;
- -- 导入数据到用户购买统计表
- INSERT INTO purchase.user_purchase_stats
- SELECT user_id, name, SUM(total_sales_quantity), SUM(total_sales_amount)
- FROM purchase.order_stats
- GROUP BY user_id, name;
- -- 导入数据到商品销售统计表
- INSERT INTO purchase.product_sales_stats
- SELECT product_id, product_name, SUM(total_sales_quantity), SUM(total_sales_amount)
- FROM purchase.order_stats
- GROUP BY product_id, product_name;
- -- 导入数据到分类销售统计表
- INSERT INTO purchase.category_sales_stats
- SELECT category, SUM(total_sales_quantity), SUM(total_sales_amount)
- FROM purchase.order_stats
- GROUP BY category;
复制代码 shell脚本
- # 导入数据到用户购买统计表
- hive -e "DELETE FROM purchase.user_purchase_stats;INSERT INTO purchase.user_purchase_stats SELECT user_id, name, SUM(total_sales_quantity), SUM(total_sales_amount) FROM purchase.order_stats GROUP BY user_id, name;"
- # 导入数据到商品销售统计表
- hive -e "DELETE FROM purchase.product_sales_stats;INSERT INTO purchase.product_sales_stats SELECT product_id, product_name, SUM(total_sales_quantity), SUM(total_sales_amount) FROM purchase.order_stats GROUP BY product_id, product_name;"
- # 导入数据到分类销售统计表
- hive -e "DELETE FROM purchase.category_sales_stats;INSERT INTO purchase.category_sales_stats SELECT category, SUM(total_sales_quantity), SUM(total_sales_amount) FROM purchase.order_stats GROUP BY category;"
复制代码 数据可视化
superset使用
1 毗连hive数据库
先启动hiveserver(在hive/bin文件夹下)
hiveserver2 &
在接下来弹出的页面中填入url
hive://localhost:10000/default?auth=NONE
点击测试通事后就可以毗连了
2 创建数据集生成图表
3 留意
superset的数据集是实时调用数据库中的数据的毗连,生成图表时要等全部东西都加载完成后(包罗图表下面的内容形貌)再举行下一步操纵,否则hive任务会堆积导致加载超时!!!(从hadoopserver界面就可以看到,MapReduce任务一直在执行)
调度运行
调试
创建租户并将租户挂到用户下
创建任务测试
假如有找不到的命令,就在/opt/soft下创建软链接,没有这个文件夹就自己创建
例如:本次用到的sqoop、hadoop、hive
脚天职别为
- hadoop version
- hive --version
- sqoop version
复制代码 可以根据输出的日志判定是否可用
执行任务
将上面的脚本对应复制到内里
r)
执行
卡死导致流程结束不了时
找到流程对应的文件并删除即可
http://t.csdnimg.cn/f5ruN
启动项备注
- # hadoop 启动hadoop
- /apps/hadoop/sbin/start-all.sh
- # hbase 启动hbase
- /apps/hbase/bin/start-hbase.sh
- # mysql
- sudo service mysql start
- flush privileges;
- hiveserver2 &
- beeline -u jdbc:hive2://ubuntu:10000/default -n syr -p 123456
- source activate spark_env
- /apps/spark/sbin/start-all.sh
- # 启动Zookeeper
- cd /apps/kafka
- bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
- # 启动kafka-server
- cd /apps/kafka
- bin/kafka-server-start.sh config/server.properties
- # 海豚
- su d
- cd d
- # 一键停止集群所有服务
- bash ./bin/stop-all.sh
- # 一键开启集群所有服务
- bash ./bin/start-all.sh
- #
- su dolphinscheduler
- bash /home/syr/big_data_tools/apache-zookeeper-3.9.1-bin/bin/zkServer.sh start
- bash /home/syr/big_data_tools/apache-dolphinscheduler-3.1.9-bin/bin/start-all.sh
- bash /home/syr/big_data_tools/apache-dolphinscheduler-3.1.9-bin/tools/bin/upgrade-schema.sh
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |