SeaTunnel 实战: Apache SeaTunnel 安装与部署

bacawa 2024-09-02 15:07:02 阅读 50

文章目录

一、准备工作1.1 环境1.2 下载

二、SeaTunnel安装2.1 解压安装包2.2.配置环境变量2.3.配置立刻生效2.4 下载SeaTunnel相关jar包2.5 测试验证2.6 启动服务

三、SeaTunnel Web 1.0.1安装3.1 将下载的压缩包解压缩到指定目录下3.2 设置 SeaTunnel Web 环境变量3.3 初始化数据库3.4 修改端口与数据源3.5 修改secretKey(很重要)3.6 配置引擎服务信息3.7 下载配置数据源JAR包3.9 上传到Seatunnel-Web项目的libs目录3.8 配置元数据MySQL的驱动JAR包3.9 上传到Seatunnel引擎服务的lib目录3.10 启动WEB服务

四、排错过程4.1 nested exception is java.lang.NoClassDefFoundError 错误


<code>提示:本次安装 SeaTunnel及SeaTunnel Web均在一台服务器上部署,集群部署本篇文章步骤可能并不适合。

一、准备工作

1.1 环境

类目 要求(基础环境安装请自行百度)
操作系统 CentOS 7.6.18_x86_64 内核 3.10.0-1160.el7.x86_64
Java Java 8 或 11, 其他高于Java 8的版本理论上也可以工作, 以及设置 JAVA_HOME
Maven 版本>= 3.6.3
数据库 Mysql 8.x

1.2 下载

进入 SeaTunnel 下载页面 下载最新版本的发布版安装包

在这里插入图片描述

目前 SeaTunnel 最新版本为 2.3.6 版本。

在这里插入图片描述

目前 SeaTunnel Web最新版本为 1.0.1 版本。

所下载的安装包如下:

在这里插入图片描述

二、SeaTunnel安装

2.1 解压安装包

<code>tar -xvf apache-seatunnel-2.3.6-bin.tar.gz

2.2.配置环境变量

在这里插入图片描述

<code>export SEATUNNEL_HOME=/seatunnel/apache-seatunnel-2.3.6

export PATH=$SEATUNNEL_HOME/bin:$PATH

2.3.配置立刻生效

source /etc/profile

2.4 下载SeaTunnel相关jar包

安装SeaTunnel过程中,解压文件后官方默认提供的connector的jar包只有2个,如下图所示:

在这里插入图片描述

要想连接Mysql,Oracle,SqlServer,Hive,Kafka,Clickhouse,Doris等时,还需下载对应的jar包。

SeaTunnel下载connector的jar时,使用mvnw来下载jar包,默认是从https://repo.maven.apache.org 下载,速度有点慢,确实是有点慢,好处是不用再一个个拷贝Jar包,所以我还是建议用这种方式进行下载。

如果改用maven下载,依赖包会进入maven的仓库,并不会进入SeaTunnel配置的目录下,如果非要这么做,Jar包下载结束后,可以去maven仓库中,一个个拷贝进来。

改为maven下载,只需要对配置文件做一点修改,具体见截图中的文字部分。

在这里插入图片描述

系统默认自动下载时会下载 plugin_config 文件中的所有连接器,路径如下:

<code>/seatunnel/apache-seatunnel-2.3.6/config/plugin_config

如果暂时不需要这么多依赖, 可以在执行下载脚本之前先在 plugin_config 配置中注释掉不需要的连接器。

--connectors-v2--

connector-amazondynamodb

connector-assert

connector-cassandra

connector-cdc-mysql

connector-cdc-mongodb

connector-cdc-sqlserver

connector-cdc-postgres

connector-cdc-oracle

connector-clickhouse

connector-datahub

connector-dingtalk

connector-doris

connector-elasticsearch

connector-email

connector-file-ftp

connector-file-hadoop

connector-file-local

connector-file-oss

connector-file-jindo-oss

connector-file-s3

connector-file-sftp

connector-file-obs

connector-google-sheets

connector-google-firestore

connector-hive

connector-http-base

connector-http-feishu

connector-http-gitlab

connector-http-github

connector-http-jira

connector-http-klaviyo

connector-http-lemlist

connector-http-myhours

connector-http-notion

connector-http-onesignal

connector-http-wechat

connector-hudi

connector-iceberg

connector-influxdb

connector-iotdb

connector-jdbc

connector-kafka

connector-kudu

connector-maxcompute

connector-mongodb

connector-neo4j

connector-openmldb

connector-pulsar

connector-rabbitmq

connector-redis

connector-druid

connector-s3-redshift

connector-sentry

connector-slack

connector-socket

connector-starrocks

connector-tablestore

connector-selectdb-cloud

connector-hbase

connector-amazonsqs

connector-easysearch

connector-paimon

connector-rocketmq

connector-tdengine

connector-web3j

connector-milvus

可以看到 2.3.6版本支持的连接器比2.3.5版本多了很多,Apache出品,必属精品。

执行下载命令

/seatunnel/apache-seatunnel-2.3.6/bin/install-plugin.sh

下载过程耗时比较长,可以去划个水先,耐心等待即可

执行完毕之后,会有类似于下图的结果显示页。

在这里插入图片描述

自动下载完成之后, 将 /seatunnel/apache-seatunnel-2.3.6/connectors

在这里插入图片描述

下所有的jar包都拷贝到 /seatunnel/apache-seatunnel-2.3.6/lib 目录下

在这里插入图片描述

2.5 测试验证

<code>#进入SeaTunnel bin目录 启动服务

./seatunnel.sh --config ../config/v2.batch.config.template -e local

看到如下页面,证明配置没有问题,就可以启动 Seatunnel 服务了。

在这里插入图片描述

2.6 启动服务

<code>#进入SeaTunnel bin目录 启动服务

nohup sh seatunnel-cluster.sh 2>&1 &

在seatunnel的安装目录下查看日志

tail -100f logs/seatunnel-engine-server.log

看到如下所示页面,即标识启动成功。

在这里插入图片描述

三、SeaTunnel Web 1.0.1安装

3.1 将下载的压缩包解压缩到指定目录下

<code>tar -xvf apache-seatunnel-web-1.0.1-bin.tar.gz

重命名下

mv apache-seatunnel-web-1.0.1-bin apache-seatunnel-web-1.0.1

3.2 设置 SeaTunnel Web 环境变量

export SEATUNNEL_WEB_HOME=/seatunnel/apache-seatunnel-web-1.0.1

export PATH=${ SEATUNNEL_WEB_HOME}/bin:$PATH

3.3 初始化数据库

数据库脚本路径

/seatunnel/apache-seatunnel-web-1.0.1/script

在这里插入图片描述

这里我直接选择跳过 init_sql.sh 初始化数据库的脚本,直接navicat 执行 seatunnel_server_mysql.sql。

执行成功,会创建seatunnel的数据库,及数据表的导入。

在这里插入图片描述

3.4 修改端口与数据源

配置文件 application.yml 路径

<code>/seatunnel/apache-seatunnel-web-1.0.1/conf

在这里插入图片描述

在这里插入图片描述

3.5 修改secretKey(很重要)

我专门写了代码,生成这个secretKey,直接也附上吧。

<code> <dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt-api</artifactId>

<version>0.11.2</version>

</dependency>

<dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt-impl</artifactId>

<version>0.11.2</version>

</dependency>

public static void main(String[] args) {

SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);

String key = Base64.getEncoder().encodeToString(secretKey.getEncoded());

System.out.println(key);

}

生成的key,填写到 secretKey 的位置。

在这里插入图片描述

3.6 配置引擎服务信息

复制引擎服务中配置文件到 Web 配置目录下面。将 hazelcast-client 配置文件拷贝到 Web 的 conf 目录下:

<code>/seatunnel/apache-seatunnel-2.3.6/config

将插件配置文件拷贝到 Web 的 conf 目录下:

/seatunnel/apache-seatunnel-2.3.6/connectors

全部拷贝至Web 的 conf 目录下:

/seatunnel/apache-seatunnel-web-1.0.1/conf

在这里插入图片描述

3.7 下载配置数据源JAR包

download_datasource.sh 数据源脚本在

在这里插入图片描述

根据你的需要选择需要下载的数据源,如果不下载在 Web 中配置数据源时会提示没有可用的数据源,记得修改版本号为1.0.1,这个我估计是版本更新留下的bug,默认是1.0.0。

在这里插入图片描述

修改为用maven进行下载。

在这里插入图片描述

执行脚本 download_datasource.sh,在下面的路径下

<code>/seatunnel/apache-seatunnel-web-1.0.1/bin

./download_datasource.sh

执行完成,会看到下面的显示。

在这里插入图片描述

采用这种方式下载的,数据源包还是会先进到 maven 仓库里面,然后再一个个拷贝进来。

在这里插入图片描述

3.9 上传到Seatunnel-Web项目的libs目录

将以上所有jar包复制到 /seatunnel/apache-seatunnel-web-1.0.1/libs 目录下

在这里插入图片描述

3.8 配置元数据MySQL的驱动JAR包

MySQL的驱动包 mysql-connector-java-8.0.30.jar 自行下载,copy到/seatunnel/apache-seatunnel-web-1.0.1/libs 目录下。

在这里插入图片描述

3.9 上传到Seatunnel引擎服务的lib目录

将 mysql-connector-java-8.0.30.jar 包复制到/seatunnel/apache-seatunnel-2.3.6/lib下

在这里插入图片描述

3.10 启动WEB服务

启动服务必须要保证服务可以访问到ui目录下的index.html文件才可以,因为项目启动前端的项目路径默认添加了/ui的前缀,所以后端项目的启动路径必须在ui目录的父级目录才可以,所以这里需要再web服务的安装目录下执行启动脚本。

我这里的安装目录是/seatunnel/apache-seatunnel-web-1.0.1,所以我这里直接切换到该目录下,执行以下启动命令:

<code>#进入web服务的安装目录

cd /seatunnel/apache-seatunnel-web-1.0.1

#执行启动脚本

sh bin/seatunnel-backend-daemon.sh start

访问http://主机IP:8801(此端口为conf/application.yml中配置的端口), 页面自动跳转到http://主机IP:8801/ui,

默认登录的用户名和密码:

username: admin

password: admin

浏览器访问图示地址,看到如下界面,基本启动就成功了。

在这里插入图片描述

四、排错过程

4.1 nested exception is java.lang.NoClassDefFoundError 错误

<code>org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'connectorCache' defined in URL [jar:file:/seatunnel/apache-seatunnel-web-1.0.1/libs/seatunnel-app-1.0.1.jar!/org/apache/seatunnel/app/bean/connector/ConnectorCache.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.seatunnel.app.bean.connector.ConnectorCache]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/seatunnel/api/table/catalog/schema/TableSchemaOptions

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1334)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:420)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)

at org.apache.seatunnel.app.SeatunnelApplication.main(SeatunnelApplication.java:36)

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.seatunnel.app.bean.connector.ConnectorCache]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/seatunnel/api/table/catalog/schema/TableSchemaOptions

at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:224)

at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326)

... 17 common frames omitted

Caused by: java.lang.NoClassDefFoundError: org/apache/seatunnel/api/table/catalog/schema/TableSchemaOptions

at org.apache.seatunnel.connectors.seatunnel.amazondynamodb.source.AmazonDynamoDBSourceFactory.optionRule(AmazonDynamoDBSourceFactory.java:45)

at org.apache.seatunnel.api.table.factory.FactoryUtil.sourceFullOptionRule(FactoryUtil.java:256)

at org.apache.seatunnel.plugin.discovery.AbstractPluginDiscovery.lambda$getAllPlugin$5(AbstractPluginDiscovery.java:260)

at java.lang.Iterable.forEach(Iterable.java:75)

at org.apache.seatunnel.plugin.discovery.AbstractPluginDiscovery.getAllPlugin(AbstractPluginDiscovery.java:248)

at org.apache.seatunnel.app.thirdparty.framework.PluginDiscoveryUtil.getAllConnectors(PluginDiscoveryUtil.java:126)

at org.apache.seatunnel.app.bean.connector.ConnectorCache.refresh(ConnectorCache.java:107)

at org.apache.seatunnel.app.bean.connector.ConnectorCache.<init>(ConnectorCache.java:73)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)

... 19 common frames omitted

Caused by: java.lang.ClassNotFoundException: org.apache.seatunnel.api.table.catalog.schema.TableSchemaOptions

at java.net.URLClassLoader.findClass(URLClassLoader.java:382)

at java.lang.ClassLoader.loadClass(ClassLoader.java:418)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)

at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

... 32 common frames omitted

基本是版本不符导致,从maven下载2.3.6版本的jar包替换2.3.3版本的jar包,重新启动。

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。