乐趣区

关于数据库:Apache-SeaTunnel本地源码构建编译运行调试

1. 环境筹备

本文应用的是 windows10-64 位专业版的电脑,须要装置环境如下

1.1 Java 环境

jdk>=1.8 – 64 位的 jdk、

1.2 Maven

应用的是 idea 自带的 maven,最好是装置一个不便源码编译构建,应用 idea 自带的 maven 无奈执行 mvnw,然而能够复制 mvnw 前面的在 idea 的 maven 中的 run maven 中的 new goal 外面执行即可。

1.3 IDEA

代码编辑调试运行器

1.4 Docker 环境

mysql8.0.28 的装置是应用 docker 装置部署

1.5 Mysql8.0.28

Docker 部署 Mysql5.7x 和 Myslq8.x

https://mp.weixin.qq.com/s/5PC_VXtNc8689ag8b8cYLA

以上那几个步骤省略

1.6 其它环境筹备

还须要如下的如下环境:

Windows10 装置 Node.js 环境

https://mp.weixin.qq.com/s/qHHcbl6AMmdEbZLKnhz_tA

Windows10 装置 Hadoop3.1.3 环境

https://mp.weixin.qq.com/s/BaXK0dMu4whOrnKQbb6G-A

Windows10 之 wsl-Linux 子系统装置 JDK、Maven 环境

https://mp.weixin.qq.com/s/Lq30469wZgikM72s8tv1ZA

在浏览本文须要对 Apache SeaTunne 有一点理解

Apache SeaTunne 简介

https://mp.weixin.qq.com/s/uHZ-29OF-NawOL4oZW6z2A

2. 源码包下载

https://seatunnel.apache.org/download
https://github.com/apache/seatunnel
https://github.com/apache/seatunnel-web

seatunnel 能够在官网的 download 下载源码包或者在 github 上下载 tag2.3.3 包,不要下载 2.3.3-release,不要下载 xxx-release 的分支,就拿 2.3.3-release 分支来说,外面的我的项目版本有 2.3.3、又有 2.3.4 的版本,我的项目模块之前的版本不对立,就会导致编译版本抵触,下载 tag 中的 2.3.3 或者是 download 源码 Source Code 包,本文应用的 tag2.3.3 的包来本地编译构建运行的,应用 2.3.3-release 分支版本不对立导致抵触,我狐疑这个 2.3.3-release 分支预计是他们的开发分支,所以这里是须要留神的,不然很难在本地搞起来,seatunnel-web 我的项目拉取的是 1.0.0-release 分支的代码。

3. idea 我的项目配置

3.1 我的项目导入

seatunnel 解压门路如下:

seatunnel-web 门路如下:

git clone https://github.com/apache/seatunnel-web.git
git checkout 1.0.0-release
或者应用 git 拉取,git 环境可要可不要

3.2 maven 配置

setting.xml 配置

配置成阿里的 maven 仓库不便编译构建是下载拉取我的项目所需的依赖包

 <localRepository>D:\developer\repository</localRepository> <!-- 改为本人的本地 maven 仓库的门路即可 -->
<mirrors>
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name> 阿里云公共仓库 </name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>aliyunmaven2</id>
      <mirrorOf>*</mirrorOf>
      <name> 阿里云公共仓库 2 </name>
      <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror>
    <mirror>
      <id>aliyunmaven3</id>
      <mirrorOf>*</mirrorOf>
      <name> 阿里云公共仓库 3 </name>
      <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
  </mirrors>

idaea 的 maven 配置

两个我的项目都是这种配置,这里抉择一个演示即可。

3.3 我的项目 JDK 配置

在 project 和 SDKs 选项中抉择配置下 jdk,两个我的项目都是这种配置,这里抉择一个演示即可。

3.4 我的项目启动参数配置

3.4.1 seatunnel 我的项目启动参数配置

jvm 参数如下:编译的压缩包的解压门路

-DSEATUNNEL_HOME=D:\developer\other-code\other\seatunnel\seatunnel-dist\target\apache-seatunnel-2.3.3

我的项目编译后会输入到 seatunnel-dist 的 target 下

3.4.2 seatunnel-web 我的项目启动参数配置

jvm 参数和环境变量如下:

jvm 参数
-DSEATUNNEL_HOME=D:\developer\other-code\other\seatunnel\seatunnel-dist\target\apache-sea
环境变量
ST_WEB_BASEDIR_PATH=D:\developer\other-code\other\seatunnel-web\seatunnel-web-dist\target\apache-seatunnel-web-1.0.1-SNAPSHOT\apache-seatunnel-web-1.0.1-SNAPSHOT

我的项目编译后会输入到 seatunnel-web-dist 的 target 下

4. 源码编译运行

4.1 sql 脚本执行

脚本如下,复制进去执行即可:

数据库执行如下:

4.2 编译构建

4.2.1 seatunnel 编译构建

jindodata 先关的 jar 须要自行下载导入,在 seatunnel-connectors-v2–>connector-file–>connector-file-jindo-oss 的 pom 文件批改依赖如下:

       <dependency>
            <groupId>com.aliyun.jindodata</groupId>
            <artifactId>jindo-core</artifactId>
            <version>${jindo-sdk.version}</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/jindo-core-4.6.1.jar</systemPath>
        </dependency>

        <dependency>
            <groupId>com.aliyun.jindodata</groupId>
            <artifactId>jindosdk</artifactId>
            <version>${jindo-sdk.version}</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/jindo-sdk-4.6.1.jar</systemPath>
        </dependency>

        <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.2</version>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>
    </build>

引入 jindodata 相干的本地依赖和打包插件,jindodata 相干包会在文末分享给大家

批改 seatunnel-hadoop3-3.1.4-uber 的 maven 如下:

该包如果不批改间接引入会导致上面的类死活依赖不到,前面将改包放入到 taget 的解压门路下的 lib 外面不失效导致报错如下:

退出 mysql8.x 的连贯驱动包,这里不加的话,能够在解压的 target 目录下的 lib 中把这个 jar 包放进去,因为本文要进行的是 mysql-jdbc—>mysql-jdbc 的单表数据同步,所以须要这个 jar 包

seatunnel.yaml 配置,这个根本默认即可

如果下载的是 release 领取的包或代码,须要在整个我的项目的 pom 中退出如下的配置:

              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

改插件配置是或略打包时候的 gpg 签名校验,不然会编译不通过,好多开源正规的我的项目都有这种签名校验的,所以须要退出这个插件才能够编译通过

4.2.3 seatunnel-web 编译构建

seatunnel-server–>seatunnel-app–>pom 退出 mysql8.x 的连贯驱动包, 能够应用 8.0.28 的包

         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

批改 seatunnel-app 下的 application.yml

将 seatunnel 我的项目外面编译到 seatunnel-dist 下 target 外面的解压文件外面的的 hazelcast-client.yaml 文件和 connectors 文件下的 plugin-mapping.properties(这个文件曾经蕴含了,能够批改,正文外面的一些插件,放入本人须要的插件即可)文件拷贝到 seatunnel-app 的 rusources 外面,如上图所示.

plugin-mapping.properties 配置文件批改只蕴含如下两个插件:

seatunnel.source.Jdbc = connector-jdbc
seatunnel.sink.Jdbc = connector-jdbc

4.3 编译打包命令

seatunnel 我的项目运行这个:mvn clean package -pl seatunnel-dist -am -Dmaven.test.skip=true
seatunnel 打包插件命令实例如下:mvn clean package -pl seatunnel-connectors-v2/connector-jdbc -am -DskipTests -T 1C

seatunnel-web 我的项目运行这个:mvn clean package -pl seatunnel-web-dist -am -Dmaven.test.skip=true
或者能够间接点击右侧 maven 的 package 打包即可

对于这个编译构建的官网也有讲,上面两个连贯关上就有,须要认真的浏览

https://seatunnel.apache.org/docs/2.3.3/contribution/setup
https://github.com/apache/seatunnel-web

4.4 启动运行

在启动前须要先启动本地的 mysql8.x、hadoop3.1.3

在启动之前将如下的 jar 包放入到 seatunnel 和 seatunnel-web 编译构建的 target 的 lib 目录下,免得启动因为短少 jar 依赖而报错

或者是把我的项目中编译好的插件或数据源 jar 复制到这个两个我的项目的 target 的 lib 目录下也是能够的,下面的是我去阿里云 maven 仓库下载的

而后先启动 seatunnel 在启动 seatunnel-web

前端 ui 编译启动

ui 源码构建公布前须要批改拜访后端的端口号:

cmd 进入到 seatunnel-web—>seatunnel-ui

门路执行如下命令:

npm install
npm run dev

4.5 拜访首页

拜访地址:

http://localhost:5173/
用户名 / 明码都是 admin

5. mysql-jdbc 到 mysql-jdbc 的单表数据同步

5.1 增加数据源

如果创立不能够抉择阐明是对应的 lib 上面没有放入对应的数据源的插件 jar 包

5.2 同步工作定义

这里咱们增加的是两个 mysql-jdbc 的数据源,这里采纳工作类型是“数据集成”,mysql 的单表同步到 mysql 的单表

将 seatunnel 库中的表 role 表同步到 seatunnel_copy 数据库中的 role 表中,seatunnel_copy 数据库中的 role 表的构造和 seatunnel 库中的表 role 表构造截然不同

工作的 source 和 sink 的数据源如果不能够选,阐明是 lib 下没有数据源相干的 jar,须要放入指定的 jar 重启我的项目才能够选数据源

source 配置如下:

sink 配置如下:

5.3 同步工作执行

保留抉择工作的类型应用的流式工作:(保留能够抉择流式工作也能够抉择批工作)

配置好工作之后,就能够点击运行按钮,执行完之后在“同步工作实例”列表中就能够看到之前的工作,状态是已实现

5.4 同步工作执行遇到的问题

如果状态执行不是已实现就会是一个以失败的状态,起因可能是短少 jar 包或者是本地短少 hadoop3.1.3 的环境,hadoop 的环境官网的大佬说不是必须的,然而我在本地做这个案例的时候没有 hadoop 会执行报错的,所以下面 seatunnel 引擎的公共模块中的 seatunnel.yaml 配置外面配置了 hdfs 相干存储的信息,所以还须要去 hdfs 上新建一个目录如下:

这个目录不建设没有试过会不会报错,反正是有总比没有好,本地没有 hapood 会报如下谬误:

大抵上是工作在执行的时候须要做一些工作的检查点或保留点的数据状态的存储,下面那个报错感觉是执行了两次或者是多个线程执行过导致数据原本第一次是曾经同步过来了,前面有搞了一次就主键抵触导致工作状态变成失败了,有了 hdfs 就不会有这个报错的,也是很神奇。

5.5 同步工作执行的后果

能够看到 seatunnel 库中 role 表数据同步到 seatunnel_copy 数据库中的 role 表中了

6. 总结

本地源码编译运行曾经分享完了,这样做是为了更好的了解这个我的项目,你能够跑起来在 idea 中本地两边的我的项目打上断点,应用 debug 调试跟踪源码,能够开发一个插件或者是为这个我的项目奉献源码,或者是用于学习,通过观赏我的项目的源码来学习我的项目中的一些好的设计思路,我集体感觉这个我的项目的亮点有一下几点:

第一 :应用 hazelcast(底层基于 netty 和 socket) 实现了内核集群,同时也能够应用 hazelcast 的代 client 向 hazelcast 引擎服务提交一个工作,而后该工作由 web 端或者是 linux 的控制台提交到引擎服务上(提交的工作是一个 json 的文件,外面定义好了 input、transform 和 sink 这三个阶段的信息),引擎服务又有 master 和 work,主节点负责管理 work 节点的状态和任务调度(工作须要下发到那个 work 节点上执行,利用多机分布式来跑工作),并且会对工作做保留点 or 检查点(有点像 fink 的保留点和检查点的概念)。

第二是插件机制:一个插件就是一个 jar 包,把公共的流程步骤高度形象封装到下层的 api 中,差异化的实现各种场景下的数据同步需要,数据源和插件是很丰盛的

第三是类加载器:实现了本人的类加载器,我的项目启动就通过本人实现的类加载器加载指定门路下的插件 jar 包,就是通过这种插件的加载机制来实现按需加载,插件的机制就是上一个插件的输入作为下一个插件的输出,数据在一个插件链条上滚动传递,有点像设计模式中的责任链模式。

第四是三套引擎:默认应用的是自研的 SeaTunnelEngine,还反对 flink 和 spark 两大引擎。

7. 材料分享

链接:https://pan.baidu.com/s/1DWKpX2j5nyvDT3UucVc1Sg 
提取码:ip7p

seatunnel-2.3.3.zip 是 tag 的源码包, apache-seatunnel-2.3.3-src.tar.gz 这个是官网的 download 下载的 sourceCode 包。

本文由 白鲸开源科技 提供公布反对!

退出移动版