
https://github.com/apache/
点击蓝字
关注我们
本文档详细介绍如何使用 Docker 部署 SeaTunnel 2.3.11,并配置 Kafka 虚拟表、数据源以及 Kafka 同步到 Hive 和 Elasticsearch 的完整实战案例。
安装准备
seatunnel-docker/├── docker-compose.yml # 主编排文件├── hive/ # Hive 配置│ ├── hive-site.xml│ └── lib/ # 依赖 jar 包│ └── postgresql-42.5.1.jar├── init-sql/ # 初始化 SQL│ └── seatunnel_server_mysql.sql├── seatunnel/ # SeaTunnel 服务端配置│ ├── Dockerfile│ └── apache-seatunnel-2.3.11/ # 解压后的二进制包│ └── lib/ # 依赖 jar 包│ ├── hive-exec-3.1.3.jar│ ├── hive-metastore-3.1.3.jar│ ├── libfb303-0.9.3.jar│ ├── mysql-connector-java-8.0.28.jar│ └── seatunnel-hadoop3-3.1.4-uber.jar└── seatunnel-web/ # SeaTunnel Web 配置├── Dockerfile└── apache-seatunnel-web-1.0.3-bin/ # 解压后的二进制包└── libs/ # 依赖 jar 包└── mysql-connector-java-8.0.28.jar
# seatunnel-2.3.11https://dlcdn.apache.org/seatunnel/2.3.11/apache-seatunnel-2.3.11-bin.tar.gz# 源码构建seatunnel-web-1.0.3git clone https://github.com/apache/seatunnel-web.gitcd seatunnel-websh build.sh code
#hive-metastore容器需要(PostgreSQL为Hive 元数据库)https://jdbc.postgresql.org/download/postgresql-42.5.1.jar#hive-metastore同步报错缺少依赖包(实际验证加前3个包即可)https://repo1.maven.org/maven2/org/apache/hive/hive-exec/3.1.3/hive-exec-3.1.3.jarhttps://repo1.maven.org/maven2/org/apache/hive/hive-metastore/3.1.3/hive-metastore-3.1.3.jarhttps://repo.maven.apache.org/maven2/org/apache/thrift/libfb303/0.9.3/libfb303-0.9.3.jarhttps://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.12.0/libthrift-0.12.0.jarhttps://repo1.maven.org/maven2/org/apache/hive/hive-common/3.1.3/hive-common-3.1.3.jar
将准备好的相关文件存放 seatunnel-docker 目录
mkdir seatunnel-dockercd seatunnel-docker
Docker部署
version: '3.9'networks:seatunnel-network:driver: bridgeipam:config:- subnet: 172.16.0.0/24services:# ===== Hive 相关服务 =====hive-metastore-db:image: postgres:15container_name: hive-metastore-dbhostname: hive-metastore-dbenvironment:POSTGRES_DB: metastore_dbPOSTGRES_USER: hivePOSTGRES_PASSWORD: hive123456ports:- "5432:5432"volumes:- ./hive-metastore-db-data:/var/lib/postgresql/datanetworks:seatunnel-network:ipv4_address: 172.16.0.2healthcheck: # 添加健康检查test: ["CMD-SHELL", "pg_isready -U hive -d metastore_db"]interval: 5stimeout: 5sretries: 10start_period: 10shive-metastore:image: apache/hive:4.0.0container_name: hive-metastorehostname: hive-metastoredepends_on:hive-metastore-db:condition: service_healthy # 等待数据库健康后才启动environment:SERVICE_NAME: metastoreDB_DRIVER: postgresSERVICE_OPTS: >--Djavax.jdo.option.ConnectionDriverName=org.postgresql.Driver-Djavax.jdo.option.ConnectionURL=jdbc:postgresql://hive-metastore-db:5432/metastore_db-Djavax.jdo.option.ConnectionUserName=hive-Djavax.jdo.option.ConnectionPassword=hive123456ports:- "9083:9083"volumes:- ./hive/lib/postgresql-42.5.1.jar:/opt/hive/lib/postgresql-42.5.1.jar- ./hive/hive-site.xml:/opt/hive/conf/hive-site.xml- ./hive-warehouse:/opt/hive/data/warehousenetworks:seatunnel-network:ipv4_address: 172.16.0.3hive-server2:image: apache/hive:4.0.0container_name: hive-server2hostname: hive-server2depends_on:- hive-metastoreenvironment:HIVE_SERVER2_THRIFT_PORT: 10000SERVICE_NAME: hiveserver2IS_RESUME: "true"SERVICE_OPTS: "-Dhive.metastore.uris=thrift://hive-metastore:9083"ports:- "10000:10000"- "10002:10002"volumes:- ./hive-warehouse:/opt/hive/data/warehousenetworks:seatunnel-network:ipv4_address: 172.16.0.4# ===== MySQL =====mysql-seatunnel:image: mysql:8.0.42container_name: mysql-seatunnelhostname: mysql-seatunnelenvironment:MYSQL_ROOT_PASSWORD: root123456MYSQL_DATABASE: seatunnelMYSQL_ROOT_HOST: '%'ports:- "3806:3306"volumes:- ./mysql_data:/var/lib/mysql- ./init-sql:/docker-entrypoint-initdb.dnetworks:seatunnel-network:ipv4_address: 172.16.0.5command: --default-authentication-plugin=mysql_native_passwordhealthcheck:test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]interval: 10stimeout: 5sretries: 5# ===== SeaTunnel =====seatunnel-master:build:context: ./seatunneldockerfile: Dockerfileimage: seatunnel:2.3.11container_name: seatunnel-masterhostname: seatunnel-masterextra_hosts:- "hive-metastore:172.16.0.3"- "hive-metastore-db:172.16.0.2"environment:- SEATUNNEL_HOME=/opt/seatunnelcommand: >sh -c "cd /opt/seatunnel &&exec bin/seatunnel-cluster.sh -r master"ports:- "5801:5801"volumes:- ./seatunnel/apache-seatunnel-2.3.11/:/opt/seatunnel/- ./logs/master:/opt/seatunnel/logs# [修改点] 挂载 Hive 仓库目录,确保数据写入宿主机共享目录- ./hive-warehouse:/opt/hive/data/warehousenetworks:seatunnel-network:ipv4_address: 172.16.0.10seatunnel-worker1:image: seatunnel:2.3.11container_name: seatunnel-worker1hostname: seatunnel-worker1extra_hosts:- "hive-metastore:172.16.0.3"- "hive-metastore-db:172.16.0.2"environment:- SEATUNNEL_HOME=/opt/seatunnelcommand: >sh -c "cd /opt/seatunnel &&exec bin/seatunnel-cluster.sh -r worker"volumes:- ./seatunnel/apache-seatunnel-2.3.11/:/opt/seatunnel/- ./logs/worker1:/opt/seatunnel/logs# [修改点] 挂载 Hive 仓库目录,确保数据写入宿主机共享目录- ./hive-warehouse:/opt/hive/data/warehousedepends_on:- seatunnel-masternetworks:seatunnel-network:ipv4_address: 172.16.0.11seatunnel-worker2:image: seatunnel:2.3.11container_name: seatunnel-worker2hostname: seatunnel-worker2extra_hosts:- "hive-metastore:172.16.0.3"- "hive-metastore-db:172.16.0.2"environment:- SEATUNNEL_HOME=/opt/seatunnelcommand: >sh -c "cd /opt/seatunnel &&exec bin/seatunnel-cluster.sh -r worker"volumes:- ./seatunnel/apache-seatunnel-2.3.11/:/opt/seatunnel/- ./logs/worker2:/opt/seatunnel/logs# [修改点] 挂载 Hive 仓库目录,确保数据写入宿主机共享目录- ./hive-warehouse:/opt/hive/data/warehousedepends_on:- seatunnel-masternetworks:seatunnel-network:ipv4_address: 172.16.0.12seatunnel-web:build:context: ./seatunnel-webdockerfile: Dockerfileimage: seatunnel-web:1.0.3container_name: seatunnel-webhostname: seatunnel-webextra_hosts:- "hive-metastore:172.16.0.3"- "hive-metastore-db:172.16.0.2"environment:- SEATUNNEL_HOME=/opt/seatunnel- SEATUNNEL_WEB_HOME=/opt/seatunnel-webports:- "8801:8801"volumes:- ./seatunnel/apache-seatunnel-2.3.11/:/opt/seatunnel/- ./seatunnel-web/apache-seatunnel-web-1.0.3-bin/:/opt/seatunnel-web/- ./logs/web:/opt/seatunnel-web/logs# [修改点] 挂载 Hive 仓库目录,保持环境一致性- ./hive-warehouse:/opt/hive/data/warehousedepends_on:- seatunnel-masternetworks:seatunnel-network:ipv4_address: 172.16.0.13
FROM eclipse-temurin:8-jdk-ubi9-minimalWORKDIR /opt/seatunnel/# 设置环境变量ENV SEATUNNEL_HOME=/opt/seatunnelENV PATH=$PATH:$SEATUNNEL_HOME/bin# 暴露端口EXPOSE 5801# 启动命令CMD ["sh", "bin/seatunnel-cluster.sh", "-r", "master"]
编辑 seatunnel/apache-seatunnel-2.3.11/config/hazelcast-client.yaml:
hazelcast-client:cluster-name: seatunnelproperties:hazelcast.logging.type: log4j2connection-strategy:connection-retry:cluster-connect-timeout-millis: 3000network:cluster-members:- seatunnel-master:5801
编辑 seatunnel/apache-seatunnel-2.3.11/config/hazelcast-master.yaml:
hazelcast:cluster-name: seatunnelnetwork:rest-api:enabled: falseendpoint-groups:CLUSTER_WRITE:enabled: trueDATA:enabled: truejoin:tcp-ip:enabled: truemember-list:- seatunnel-master:5801- seatunnel-worker1:5802- seatunnel-worker2:5802port:auto-increment: falseport: 5801properties:hazelcast.invocation.max.retry.count: 20hazelcast.tcp.join.port.try.count: 30hazelcast.logging.type: log4j2hazelcast.operation.generic.thread.count: 50hazelcast.heartbeat.failuredetector.type: phi-accrualhazelcast.heartbeat.interval.seconds: 2hazelcast.max.no.heartbeat.seconds: 180hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100
编辑 seatunnel/apache-seatunnel-2.3.11/config/hazelcast-worker.yaml:
hazelcast:cluster-name: seatunnelnetwork:join:tcp-ip:enabled: truemember-list:- seatunnel-master:5801- seatunnel-worker1:5802- seatunnel-worker2:5802port:auto-increment: falseport: 5802properties:hazelcast.invocation.max.retry.count: 20hazelcast.tcp.join.port.try.count: 30hazelcast.logging.type: log4j2hazelcast.operation.generic.thread.count: 50hazelcast.heartbeat.failuredetector.type: phi-accrualhazelcast.heartbeat.interval.seconds: 2hazelcast.max.no.heartbeat.seconds: 180hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100
配置同步任务,点击 Source 组件,源名称下拉框没有数据,需要安装依赖才可以显示。
cd seatunnel/apache-seatunnel-2.3.11/sh bin/install-plugin.sh
<?xml version="1.0" encoding="UTF-8"?><configuration><property><name>hive.metastore.uris</name><value>thrift://hive-metastore:9083</value></property><property><name>hive.metastore.warehouse.dir</name><value>/opt/hive/data/warehouse</value></property><property><name>metastore.metastore.event.db.notification.api.auth</name><value>false</value></property></configuration>
postgresql-42.5.1.jar拷贝 seatunnel-web/apache-seatunnel-web-1.0.3-bin/script/seatunnel_server_mysql.sql 到
init-sql/seatunnel_server_mysql.sql
cd seatunnel-dockercp seatunnel-web/apache-seatunnel-web-1.0.3-bin/script/seatunnel_server_mysql.sql init-sql/seatunnel_server_mysql.sql
# 启动所有服务docker compose up -d --build# 访问web ui页面 默认登录账号:admin / adminopen http://localhost:8801
运行示例






配置为 thrift://hive-metastore:9083 也可以。










job env can't be empty, please change config
Hive相关操作
# 进入 HiveServer2 容器docker exec -it hive-server2 beeline -u jdbc:hive2://localhost:10000 -e "CREATE TABLE IF NOT EXISTS default.test_user_data3 (user_id STRING,type STRING,content STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;"# 或创建 Parquet 格式(推荐)docker exec -it hive-server2 beeline -u jdbc:hive2://localhost:10000 -e "CREATE TABLE IF NOT EXISTS default.test_user_data3 (user_id STRING,type STRING,content STRING)STORED AS PARQUET;"
docker exec -it hive-server2 beeline -u jdbc:hive2://localhost:10000 -e "
SHOW TABLES IN default;
DESCRIBE default.test_user_data3;
"
docker exec -it hive-server2 beeline -u jdbc:hive2://localhost:10000 -e "
SELECT * FROM default.test_user_data3 LIMIT 10;
"
备注
seatunnel seatunnel-web ERROR [qtp2135089262-20] [MetaStoreUtils.logAndThrowMetaException():166] - Got exception: java.net.URISyntaxException Illegal character in hostname at index 44: thrift://hive-metastore.seatunnel-docker_seatunnel-network:9083docker-compose.yml 对应容器加上 ip 绑定
extra_hosts:- "hive-metastore:172.16.0.3"- "hive-metastore-db:172.16.0.2"
seatunnel/apache-seatunnel-2.3.11/lib 存放依赖包
hive-exec-3.1.3.jarhive-metastore-3.1.3.jarlibfb303-0.9.3.jar
docker-compose.yml 对应容器加上 hive 写入本地目录的配置
volumes:# [修改点] 挂载 Hive 仓库目录,确保数据写入宿主机共享目录- ./hive-warehouse:/opt/hive/data/warehouse
./logs/master/seatunnel-engine-master.log
Task [TaskGroupLocation{jobId=1080750681855361026, pipelineId=1, taskGroupId=2}] will be executed on worker [[seatunnel-worker2]:5801], slotID [2], resourceProfile [ResourceProfile{cpu=CPU{core=0}, heapMemory=Memory{bytes=0}}], sequence [db6b679c-67cc-43b8-b64a-acaa85c2a4c0], assigned [1080750681855361026]作者 | 云婷
原文链接:https://www.cnblogs.com/thao/p/19666609
Apache SeaTunnel是一个云原生的多模态、高性能海量数据集成工具。北京时间 2023 年 6 月1 日,全球最大的开源软件基金会ApacheSoftware Foundation正式宣布SeaTunnel毕业成为Apache顶级项目。目前,SeaTunnel在GitHub上Star数量已达9k+。SeaTunnel支持在云数据库、本地数据源、SaaS、大模型等170多种数据源之间进行数据实时和批量同步,支持CDC、DDL变更、整库同步等功能,更是可以和大模型打通,让大模型链接企业内部的数据。
同步Demo
新手入门

最佳实践

测试报告

源码解析



