kuhuo
kuhuo
发布于 2024-08-09 / 169 阅读
0
0

快速搭建一套实时数仓演示环境

引言

哈喽各位看官老爷,又见面了~

先说个好消息:Apache Doris 补习班公众号粉丝突破 2k!

这是一个新的里程碑,感谢大家的支持~

昨晚在直播的结束时刻,我说尽快会给大家一份通过 Docker 快速搭建部署一套演示环境的 Demo 文章示例,那么本篇就应昨天的承诺,给大家来一篇简单、高效、可复刻的快速搭建演示环境的教程。

文章不长,所以大家有兴趣的话完全可以上手来测测,一共就八步,天龙八部(步)。

话不多说,开干!

环境准备

  1. 1. 本次用的镜像是基于x86做的,故此需要一台 x86 机器

  2. 2. 部署好 docker 服务和 docker-compose

  3. 3. 硬件规格最小 4C8G

操作流程

1.上传或创建 Docker-Compose 的 doris-demo.yaml 脚本到服务器

version: "3"
services:
    mysql:
        image:mysql:8.0.31
        volumes:
            -/data/mysql/script:/docker-entrypoint-initdb.d
        environment:
            MYSQL_ROOT_PASSWORD:123456
            MYSQL_DATABASE:doris-test
            MYSQL_PASSWORD:123456
        command:
            --character-set-server=utf8
        hostname:mysql
        ports:
            -3306:3306
    jobmanager:
        image:apache/flink:1.17-scala_2.12
        expose:
            -6123
        ports:
            -8081:8081
        volumes:
            -/data/flink/flink-doris-connector-1.17-1.6.2.jar:/opt/flink/lib/flink-doris-connector-1.17-1.6.2.jar
            -/data/flink/flink-sql-connector-mysql-cdc-2.4.2.jar:/opt/flink/lib/flink-sql-connector-mysql-cdc-2.4.2.jar
        command:jobmanager
        environment:
            -JOB_MANAGER_RPC_ADDRESS=jobmanager
    taskmanager:
        image:apache/flink:1.17-scala_2.12
        expose:
            -6121
            -6122
        depends_on:
            -jobmanager
        volumes:
            -/data/flink/flink-doris-connector-1.17-1.6.2.jar:/opt/flink/lib/flink-doris-connector-1.17-1.6.2.jar
            -/data/flink/flink-sql-connector-mysql-cdc-2.4.2.jar:/opt/flink/lib/flink-sql-connector-mysql-cdc-2.4.2.jar
        command:taskmanager
        links:
            -"jobmanager:jobmanager"
        environment:
            -JOB_MANAGER_RPC_ADDRESS=jobmanager
    doris:
        image:registry.cn-hangzhou.aliyuncs.com/freeoneplus/doris:2.1.4-all
        hostname:doris
        ports:
            -8030:8030
            -9030:9030
            -8040:8040
        network_mode:host
    superset:
        image:selectdb/superset_3.0.1-cloud_3.0.3:latest
        user:"root"
        environment:
            -SUPERSET_SECRET_KEY="doris"
        command:
            -"sh"
            --c
            -|
               superset db upgrade
               superset fab create-admin --username admin --password doris --firstname Superset --lastname Admin --email admin@superset.com
               superset init
               /bin/sh -c /usr/bin/run-server.sh
        ports:
            -8088:8088
        restart:on-failure
        network_mode: host

这里简单介绍一下,该 yaml 脚本中一共有五个进程:

  • • MySQL:TP库,模拟业务库,初始化密码为123456,初始化的数据库为doris-test

  • JobManager:Flink-Job-Manager,负责 Flink 任务管理等

  • • TaskManager:Flink-Task-Manager,负责 Flink 任务执行等

  • • Doris:All-In-One 的镜像,内置 1FE 1BE,且会自动注册

  • SuperSet:All-In-One 的镜像,里面内置了 Apache Doris 数据源,用户名为admin,密码为doris

2.将Flink依赖的 Flink-MySQL-Connector 和 Flink-Doris-Connector 两个依赖jar包下载至对应宿主机目录,这里我使用的是/data/flink目录,可根据自身需要调整

# flink-doris-connector-1.17-1.6.2 下载地址
https://repo1.maven.org/maven2/org/apache/doris/flink-doris-connector-1.17/1.6.2/flink-doris-connector-1.17-1.6.2.jar
# flink-sql-connector-mysql-cdc-2.4.2 下载地址
https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.4.2/flink-sql-connector-mysql-cdc-2.4.2.jar

3.启动 Docker-Compose 脚本

docker-compose -f doris-demo.yaml up -d

4.连接 MySQL 创建库表并初始化数据,这里有两种方式,一种可以通过 MySQL-Client、Navicat 或者 DBeaver 去连接,使用 MySQL-JDBC 连接方式,账号为root,密码为123456,端口为 3306,连接成功后执行创建库表语句和初始化插入语句,另一种可通过 docker-compose exec 命令完成库表创建,命令如下:

   docker-compose exec mysql mysql -uroot -p123456 -e "
   DROP TABLE IF EXISTS \`doris-test\`.\`orders\`;
   CREATE TABLE \`doris-test\`.\`orders\` (
     order_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
     order_date DATETIME NOT NULL,
     customer_name VARCHAR(255) NOT NULL,
     price DECIMAL(10, 5) NOT NULL,
     product_id INTEGER NOT NULL,
     order_status BOOLEAN NOT NULL -- Whether order has been placed
   ) AUTO_INCREMENT = 10001;
   INSERT INTO \`doris-test\`.\`orders\`
   VALUES (default, '2020-07-05 10:08:22', 'Jark', 50.50, 102, false),
   (default, '2020-07-05 10:11:09', 'Sally', 15.00, 105, false),
   (default, '2020-07-05 12:00:30', 'Edward', 25.25, 106, false);"

这里我们创建了一张名为 orders 的表,并初始化了三条数据。

5.根据源表创建 FlinkJob 任务,自动同步表结构并创建 CDC 任务持续导入数据,可使用如下命令提交 Job 任务:

docker-compose exec jobmanager /opt/flink/bin/flink run \
-Dexecution.checkpointing.interval=5s \
-Dparallelism.default=1 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
/opt/flink/lib/flink-doris-connector-1.17-1.6.2.jar \
           mysql-sync-database \
--database mysql_demo \
--mysql-conf hostname=${改为你的机器内网IP地址} \
--mysql-conf username=root \
--mysql-conf password=123456 \
--mysql-conf port=3306 \
--mysql-conf database-name=doris-test \
--sink-conf fenodes=${改为你的机器内网IP地址}:8030 \
--sink-conf benodes=${改为你的机器内网IP地址}:8040 \
--sink-conf username=root \
--sink-conf password= \
--sink-conf jdbc-url=jdbc:mysql://${改为你的机器内网IP地址}:9030 \
--sink-conf sink.label-prefix=label \
--single-sinktrue \
--table-conf replication_num=1 ;

把IP地址改为你的内网IP地址即可,其他不用改变,具体若希望知道每个参数都是代表什么意思,可在 Doris 官网的 Flink-Doris-Connector 章节找到所有参数。

6.查询 Doris 是否成功创建表和同步数据,同样可通过 DBeaver、MySQL-Client、Navicat 等工具连接到 Doris 查看,数据源选择 MySQL,账号为root,密码为空,端口为9030,连接成功后执行查询即可。或通过 docker-compose exec 命令进行查询,命令如下:

docker-compose exec doris mysql -uroot -P9030 -h127.0.0.1 -e "select * from mysql_demo.orders"

7.登录 SuperSet 界面,配置数据源、数据集、图表、看板,并设置自动刷新

  • • 登录

  • • 配置数据源

  • • 创建数据集

  • • 配置图表

  • • 创建看板

  • • 设置自动刷新

8.MySQL端实时插入数据,SuperSet 看板实时更新

   docker-compose exec mysql mysql -uroot -p123456 -e "
   INSERT INTO \`doris-test\`.\`orders\`
   VALUES (default, '2020-07-05 10:30:15', 'Tom', 12.50, 104, false),
   (default, '2020-07-05 10:35:09', 'Sally', 35.00, 108, false),
   (default, '2020-07-05 11:00:30', 'Jark', 66.15, 106, false);"

视频教程

今晚发布于 B站 Apache Doris 补习班。

小结

后续我会制作更多诸如此类的简单易用快速上手的 Demo 演示环境教程供大家去体验,甚至后续的 3.0 存算分离,也会有类似这样的形态去尝试和玩耍。

但这里一定注意一点:不可上生产!不可上生产!不可上生产!!!

这是为了轻松入门和快速学习调试使用的,不要在生产上使用!

制作不易,来个点赞在看鼓励鼓励吧!

如果你们还想拥有怎样的 Demo 环境,也可以留言,后续有精力会一一去做的~

感谢支持!


评论