seatunnel-web本地安装教程(超详细)

杨林伟 2024-10-06 15:03:01 阅读 97

文章目录

1. 引言2. 后端打包部署2.1 打包2.2 启动SeaTunnel Zeta Engine 服务2.3 其它

3. web端打包部署3.1 初始化数据库3.2 打包配置3.2 启动服务

4. 报错汇总4.1 JWT SecretKey长度问题4.2 Cannot load driver class: com.mysql.cj.jdbc.Driver4.3 spotless校验报错4.4 maven依赖报错4.5 seatunnel无法加载源名称列表

5. 文末

1. 引言

官方安装教程:https://github.com/apache/seatunnel-web

本文为 seatunnel-web 的本地安装教程,如果直接参考官网官方的教程去安装,可能会有一些奇奇怪怪的问题,所以博主在本文详细记录安装的步骤,以便有需要的同学参考。


安装 <code>seatunnel-web 按如下步骤执行

编译打包 seatunnel 源码(2.3.3-release分支),启动SeaTunnel Zeta Engine服务;初始化 seatunnel-web 数据库脚本;编译打包seatunnel-web源码(main分支),配置启动参数和环境变量,启动web server以及前端。


2. 后端打包部署

首先需要打包部署后端工程,可以直接下载安装包或从源码构建:

安装包地址:https://seatunnel.apache.org/download源码地址:https://github.com/apache/seatunnel.git

为了让大家更进一步的去理解,本文使用的是源码的方式构建。

2.1 打包

首先需要打包。IDEA导入源码后,IDEA导入并切换到 2.3.3-release 稳定版分支(备注:因为seatunnel-web项目的main分支默认使用的seatunnel版本也是为2.3.3版本,所以这里使用2.3.3版本)。

进入项目根目录终端执行打包命令:

mvn -U -T 1C clean install -DskipTests -D"maven.test.skip"=true -D"maven.javadoc.skip"=true -D"checkstyle.skip"=true -D"license.skipAddThirdParty"

或直接使用IDEA打包

在这里插入图片描述

从上图可以看到打包成功,在<code>/seatunnel/seatunnel-dist/target/apache-seatunnel-2.3.4-SNAPSHOT-bin.tar.gz目录可以看到打包完成的压缩包。

接着复制到固定的目录,并解压:

## 复制到本地固定目录

## 解压

tar -zxvf apache-seatunnel-2.3.4-SNAPSHOT-bin.tar.gz

解压后目录如下:

在这里插入图片描述

2.2 启动SeaTunnel Zeta Engine 服务

启动命令:

<code>## 进去启动目录

cd apache-seatunnel-2.3.4-SNAPSHOT/bin/

## 启动

./seatunnel-cluster.sh -d

## 验证端口是否被占用(mac系统)

lsof -i:5801

启动成功,可以看到 5801 端口被占用了,后端服务启动成功:

在这里插入图片描述

2.3 其它

进入<code>connectors/seatunnel目录,发现只有打包了两个democonnector,其实这两个包是不够的,后续seatunnel-web工程启动时会读取这里面的目录加载驱动并放到不同类型的cache,如果不加多几个,会导致新建同步任务,配置作业时无法找到数据源(即使已经添加了数据源)

在这里插入图片描述

可以按需添加connector,具体在<code>/seatunnel/seatunnel-dist/src/main/assembly/assembly-bin.xml文件里添加自己需要的connector,但是为了方便,我在这里添加所有的connector,例如:

<!-- ============ Connectors Jars ============ -->

<!-- SeaTunnel connectors for Demo -->

<dependencySet>

<useProjectArtifact>false</useProjectArtifact>

<useTransitiveDependencies>true</useTransitiveDependencies>

<unpack>false</unpack>

<includes>

<include>org.apache.seatunnel:connector-*:jar</include>

</includes>

<outputDirectory>/connectors/seatunnel</outputDirectory>

<scope>provided</scope>

</dependencySet>

3. web端打包部署

使用的是默认main分支

IDEA导入源码:https://github.com/apache/seatunnel-web.git

3.1 初始化数据库

数据库客户端连接本地mysql数据库,执行/seatunnel-web/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_mysql.sql初始化脚本,执行成功如下:

在这里插入图片描述

3.2 打包配置

打包项目:

在这里插入图片描述

修改<code>seatunnel-server/seatunnel-app/src/main/resources/application.yml,添加本地数据库连接信息(注意:下图的 jwt.secretkey 按官网教程设置为 Seatunnel是会报错的,后面会贴上解决方式):

在这里插入图片描述

按教程,拷贝后端编译后的 plugin-mapping.properties 文件(即:<code>/seatunnel/seatunnel-dist/target/apache-seatunnel-2.3.4-SNAPSHOT/connectors/plugin-mapping.properties)至seatunnel-web/seatunnel-server/seatunnel-app/src/main/resources目录。

在这里插入图片描述

配置 <code>SeatunnelApplication:

在这里插入图片描述

Add VM Options…

在这里插入图片描述

输入:<code>-DSEATUNNEL_HOME=${seatunnel安装包解压路径},例如:

在这里插入图片描述

还需要配置前端环境变量(<code>ST_WEB_BASEDIR_PATH),变量值为可一般当前项目路径/seatunnel-web/seatunnel-web-dist/target/apache-seatunnel-web-1.0.0-SNAPSHOT/apache-seatunnel-web-1.0.0-SNAPSHOT,以下是官网的配置流程图:

在这里插入图片描述

3.2 启动服务

启动web后端服务: <code>/seatunnel-web/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/SeatunnelApplication.java

在这里插入图片描述

启动前端:

<code>cd seatunnel-ui

npm install

npm run dev

在这里插入图片描述

浏览器打开:http://localhost:5173/,默认账号密码为:<code>admin/admin

在这里插入图片描述

登录成功后,添加数据源,新建任务等,都正常:

在这里插入图片描述

4. 报错汇总

4.1 JWT SecretKey长度问题

登录报错了:

<code>2024-06-26 16:26:59.675 seatunnel yanglinweideMacBook-Pro-2.local ERROR [tr:,sp:] [qtp170778406-29] [GlobalExceptionHandler.logError():83] - The signing key's size is 72 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS256 MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonwebtoken.security.Keys class's 'secretKeyFor(SignatureAlgorithm.HS256)' method to create a key guaranteed to be secure enough for HS256. See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.

io.jsonwebtoken.security.WeakKeyException: The signing key's size is 72 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS256 MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonwebtoken.security.Keys class's 'secretKeyFor(SignatureAlgorithm.HS256)' method to create a key guaranteed to be secure enough for HS256. See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.

at io.jsonwebtoken.SignatureAlgorithm.assertValid(SignatureAlgorithm.java:371)

这个错误提示表明,当前使用的签名密钥长度不足以满足 HS256 算法的安全要求。根据 JWT JWA 规范 (RFC 7518, Section 3.2),HS256 算法的密钥长度必须大于或等于 256 位 (32 字节)。

新建一个工具类去执行生成:

package org.apache.seatunnel.app.security;

import io.jsonwebtoken.SignatureAlgorithm;

import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;

import java.util.Base64;

public class JwtKeyUtil {

/**

* 生成一个符合 HS256 算法要求的密钥字符串

*

* @return 生成的密钥字符串

*/

public static String generateSecretKey() {

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

return Base64.getEncoder().encodeToString(secretKey.getEncoded());

}

public static void main(String[] args) {

// 生成并打印密钥

String secretKey = generateSecretKey();

System.out.println("Generated Secret Key: " + secretKey);

}

}

在这里插入图片描述

复制到<code>/seatunnel-web/seatunnel-server/seatunnel-app/src/main/resources/application.yml:

在这里插入图片描述

重新启动SeatunnelApplication,登录成功:

在这里插入图片描述

4.2 Cannot load driver class: com.mysql.cj.jdbc.Driver

提示MySQL驱动找不到,把 <code>/seatunnel-web/seatunnel-server/seatunnel-app/pom.xml 里面mysql-connector-java依赖的scope由test改为provided

在这里插入图片描述

4.3 spotless校验报错

提示了错误:

在这里插入图片描述

这个错误指的是没有通过<code>spotless插件的校验检查,执行如下命令自动修复,如下直接在IDEA操作:

mvn spotless:apply

4.4 maven依赖报错

当然,还有很多的报错问题,一般都是依赖的问题,最好的方式直接打开IDEA maven视图,把报错的依赖处理即可。例如:暂时移除一些依赖(如:connector-file-jindo-ossseatunnel-flink-15-starter)(不建议)、或可能是由于一些jar包无法下载的问题,需要科学上网。

4.5 seatunnel无法加载源名称列表

添加了数据源之后,seatunnel无法加载源名称列表。需要确认前端(seatunnel-web)引用的是哪个seatunnel版本,具体在根目录的pom文件:

<seatunnel-framework.version>2.3.3</seatunnel-framework.version>

如上面代码所示,当前seatunnel-web使用的seatunnel版本为2.3.3,因此配置的后端部署包必须为2.3.3版本(即:SEATUNNEL_HOME的启动参数对应的seatunnel版本必须一致)。因为seatunnel-web会使用插件发现工具类(PluginDiscoveryUtil)动态加载指定目录的所有jar包,如果版本不一致,会导致程序启动失败或不会把这些jar包放入到cache(对应:org.apache.seatunnel.app.bean.connector.ConnectorCache),有兴趣的可以看源码,这里不展开说明。

5. 文末

本文主要讲解 seatunnel-web 在本地的安装部署教程,坑基本都填完了,后面我会继续研究并分享出seatunnel的核心源码及设计。谢谢大家的阅读,希望能帮助到大家,本文完!



声明

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