Dolphinscheudler 3.2.0 + Seatunnel 2.3.8 + Superset 部署实战

  本文介绍如何利用 Dolphinscheduler(海豚调度)与 SeaTunnel 实现异构数据源之间的高效数据同步功能,再通过 Apache Superset 进行深入的数据分析和可视化展示。

Dolphinscheduler 是一个分布式易扩展的工作流调度系统,用于管理和自动化任务流程。SeaTunnel 作为一个数据集成平台,其核心功能是依托丰富的连接器进行数据同步,使得不同来源的数据能够被有效地整合和处理。Superset 是一个开源的现代数据分析与 BI Web平台,它提供了直观的界面来探索、分析。

环境准备工作:
  Java version: 1.8.0_432
  Apache Maven 3.6.3
  Docker version 24.0.7
  docker-compose version 1.29.2

一、Dolphinscheduler Docker Compose 部署

  官方提供了3种部署方式,轻量化快速部署选择 docker compose 的原因是,直接使用官方 docker 镜像的话无法使用户数据持久化,该镜像默认使用 h2 内存数据库,每次更新配置重启 docker 数据会丢失。使用 docker compose 就能用 postgresql (要记得在 docker-compose.yml 修改自己的账号密码)。

部署步骤

  下载地址:https://dolphinscheduler.apache.org/en-us/download/3.2.0
  参考地址:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.0/guide/start/docker

$ DOLPHINSCHEDULER_VERSION=3.2.0
$ tar -zxf apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src.tar.gz
# Going to docker-compose's location
# For Mac or Linux users 
$ cd apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src/deploy/docker
# For Windows users, you should run command `cd apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src\deploy\docker`

## 进入网站:https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/
## 下载对应版本的jar包:https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar
## 将下载下来的驱动放到:/opt/dolphinscheduler/libs/api-server 和 /opt/dolphinscheduler/libs/worker-server

# Initialize the database, use profile schema
$ docker-compose --profile schema up -d

# start all dolphinscheduler server, use profile all
$ docker-compose --profile all up -d

  至此,docker ps 可以看到有6个容器被创建。浏览器访问http://localhost:12345/dolphinscheduler/ui ,初始账号密码: admin/dolphinscheduler123 (登陆后可修改)

二、Seatuennl 部署

  官网教程分为本地模式和集群模式,选择本地模式部署比较快,因此使用下载到本地的二进制压缩包的方式部署。基本原理:

1)程序解析应用配置,并创建环境。
2)配置里source{},transform{},sink{} 三个块中的插件最终在程序中以List集合的方式存在。
3)由 Excution 对象来拼接各个插件,这涉及到选择 source_table,注册 result_table 等流程,注册 udf 等流程。并最终触发执行。

部署步骤

  下载地址:https://seatunnel.apache.org/download/
  参考地址:https://seatunnel.incubator.apache.org/docs/2.3.8/start-v2/locally/deployment

  1. 解压
export version="2.3.8"
tar -xzvf "apache-seatunnel-${version}-bin.tar.gz"
  1. 配置环境变量
vim /etc/profile
export SEATUNNEL_HOME=/data/seatunnel/backend/apache-seatunnel-2.3.8
export PATH=$SEATUNNEL_HOME/bin:$PATH
source /etc/profile
  1. 修改 maven 镜像源
## /.mvn/wrapper/maven-wrapper.properties
## 在配置文件中修改成阿里云镜像
distributionUrl=https://maven.aliyun.com/repository/public/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
wrapperUrl=https://maven.aliyun.com/repository/public/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
  1. 修改下载连接器的脚本,选择要下载的连接器,无用的可以注释掉。可以将 ${SEATUNNEL_HOME}/mvnw 替换为 mvn,可以使用本地mvn。
## 备份文件
cp install-plugin.sh install-plugin.sh.bak

## 下载连接器的 jar 包
sh install-plugin.sh
  1. 在config/目录中有一个seatunnel-env.sh脚本,可以查机器上环境变量有没有 flink 或者 spark 引擎,没有就直接使用 seatunnel 引擎。start-seatunnel-flink.sh 是用来提交 flink 任务的。start-seatunnel-spark.sh 是用来提交 Spark 任务的。用 seatunnel.sh 测试 v2.batch.config.template 中的脚本,判断服务是否运行。
cd "apache-seatunnel-${version}"
./bin/seatunnel.sh --config ./config/v2.batch.config.template -m local

  至此,就跑完了一个官方案例。如果所连接的数据源失败,要具体查看 /connectors 和 /lib 中是否已有该数据源的 jar 包,一般需要额外下载 mysql-connector-java-8.0.20.jar。

  从 SeaTunnel 的 app 配置文件开始,一个完整的 SeaTunnel 配置文件应包含四个配置组件。分别是:

env {}
source{}
transform {}
sink {}

  在 Source 和 Sink 数据同构时,如果业务上也不需要对数据进行转换,那么 transform 中的内容可以为空。具体需根据业务情况来定。

三、Dolphinscheduler 与 Seatunnel 的集成

  Dolphinscheduler 是自带 seatunnel 任务节点模块的,可以在 [工作流定义] 定义一个 seatunnel 工作流测试运行,在 [任务实例] 中查看日志,发现任务是会被分配到 master 或某个 worker 节点上执行的。因此,需要保证在这些节点有 Seatunnel 环境。
因为我的 seatunnel 和 Dolphinscheduler 是部署在同一台宿主机上的,基于seatunnel 的基本原理,我可以直接挂载 seatunnel 到 Dolphinscheduler 上提供服务。

步骤

  1. 在 dolphinscheduler-src/deploy/docker/docker-compose.yml 中的 dolphinscheduler-api、dolphinscheduler-master、dolphinscheduler-worker,将宿主机的 /data/seatunnel/backend/apache-seatunnel-2.3.8 挂载到容器的 /opt/seatunnel,使容器的环境变量可以找到 seatunnel/bin 下的 seatunnel.sh
  dolphinscheduler-worker:
    image: ${HUB}/dolphinscheduler-worker:${TAG}
    profiles: ["all"]
    env_file: .env
    healthcheck:
      test: [ "CMD", "curl", "http://localhost:1235/actuator/health" ]
      interval: 30s
      timeout: 5s
      retries: 3
    depends_on:
      dolphinscheduler-zookeeper:
        condition: service_healthy
    volumes:
      - dolphinscheduler-worker-data:/tmp/dolphinscheduler
      - dolphinscheduler-logs:/opt/dolphinscheduler/logs
      - dolphinscheduler-shared-local:/opt/soft
      - dolphinscheduler-resource-local:/dolphinscheduler
      - /data/seatunnel/backend/apache-seatunnel-2.3.8:/opt/seatunnel ⬅ 添加
    networks:
      - dolphinscheduler
    environment:  ⬅ 添加
      - SEATUNNEL=/opt/seatunnel ⬅ 添加
  1. 重启相关容器
cd /data/dolphinscheduler/apache-dolphinscheduler-3.2.0-src/deploy/docker/
docker-compose restart dolphinscheduler-master dolphinscheduler-api dolphinscheduler-worker
docker-compose ps

## 或者直接
# start all dolphinscheduler server, use profile all
docker-compose --profile all up -d

# 检查是否挂载成功
docker inspect docker_dolphinscheduler-api_1
  1. 进到容器里,在各容器里配置 java 环境变量
docker exec -it docker_dolphinscheduler-api_1 /bin/bash
export SEATUNNEL_HOME=/opt/seatunnel
echo $SEATUNNEL_HOME

java -version
which java
export JAVA_HOME=/opt/java/openjdk
export PATH=$JAVA_HOME/bin:$PATH
echo $JAVA_HOME
echo $PATH
  1. 验证,选择启动脚本:seatunnel.sh,部署方式:local

脚本:(Doris 是如果库里没有表需要用 save_mode_create_template 先建表)

env {
  execution.parallelism = 2
  job.mode = "BATCH"
  checkpoint.interval = 10000
}
source{
    Jdbc {
        url = "jdbc:mysql://ip:port/db?useUnicode=true&characterEncoding=utf8"
        driver = "com.mysql.cj.jdbc.Driver"
        connection_check_timeout_sec = 100
        user = ""
        password = ""
        query = "select * from 源表;"
        table = "源表"
        result_table_name = "目标表"
    }
}


sink {
  Doris {
      fenodes="ip:port"
      username =""
      password=""
      table.identifier = "testdb.目标表"
      sink.enable-2pc = "true"
      sink.label-prefix = "test-cdc"
      doris.config = {
            format="json"
            read_json_by_line="true"
        }
      save_mode_create_template = """
      CREATE TABLE IF NOT EXISTS `${database}`.`${table}` (
                id BIGINT COMMENT '主键',
                project_code STRING COMMENT '项目编码',
                project_name STRING COMMENT '项目名称',
                total_contract
            )
            ENGINE=OLAP
            UNIQUE KEY(id)
            DISTRIBUTED BY HASH(id) BUCKETS 10
            PROPERTIES (
                "replication_allocation" = "tag.location.default: 1",
                "in_memory" = "false",
                "storage_format" = "V2",
                "disable_auto_compaction" = "false"
            );
      """
  }
}

四、Superset docker 部署

步骤

参考地址:https://superset.apache.org/docs/quickstart

  1. docker 配国内镜像源后,直接拉镜像。
docker pull apache/superset
docker images
  1. 创建密钥,进入容器
## 使用命令“openssl rand -base64 42”创建SECRET_KEY填写到下面
## 运行容器
docker run -d --name superset-server -p 8088:8088 -e SUPERSET_SECRET_KEY="" apache/superset
docker exec -it superset-server superset-init

## 进入后,数据库初始化
export SUPERSET_SECRET_KEY=""
superset db upgrade

## 初始化应用
superset init

## 设置管理员账户
export FLASK_APP=superset
flask fab create-admin

## 汉化
sed -i "s/BABEL_DEFAULT_LOCALE = \"en/BABEL_DEFAULT_LOCALE = \"zh/g" superset/config.py
sed -i "s/LANGUAGES = {}/# LANGUAGES = {}/g" superset/config.py
  1. 在容器中下载 mysql 等依赖,说是通过 pip install 安装的驱动仅在当前容器中有效,如果容器重启或重新部署,更改会丢失(但是目前重启后安装的依赖并没有失效)。如果要安装其他数据源的依赖也是找到那个数据源 pip install 就行。
docker exec -it superset-server /bin/bash
pip install mysqlclient
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
docker restart superset-server

  至此,我们已成功构建了一个基于开源技术——DolphinScheduler、SeaTunnel 和 Superset 的数据采集、同步与分析平台。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值