<article class=“article fmt article-content”><h2>1. 环境筹备</h2><p>本文应用的是windows10-64位专业版的电脑,须要装置环境如下</p><h3>1.1 Java环境</h3><p>jdk>=1.8 - 64 位的jdk、</p><h3>1.2 Maven</h3><p>应用的是idea自带的maven,最好是装置一个不便源码编译构建,应用idea自带的maven无奈执行mvnw,然而能够复制mvnw前面的在idea的maven中的run maven中的new goal外面执行即可。</p><h3>1.3 IDEA</h3><p>代码编辑调试运行器</p><h3>1.4 Docker环境</h3><p>mysql8.0.28的装置是应用docker装置部署</p><h3>1.5 Mysql8.0.28</h3><p>Docker部署Mysql5.7x和Myslq8.x</p><pre><code>https://mp.weixin.qq.com/s/5PC_VXtNc8689ag8b8cYLA</code></pre><p>以上那几个步骤省略</p><h3>1.6 其它环境筹备</h3><p>还须要如下的如下环境:</p><p>Windows10装置Node.js环境</p><pre><code>https://mp.weixin.qq.com/s/qHHcbl6AMmdEbZLKnhz_tA</code></pre><p>Windows10装置Hadoop3.1.3环境</p><pre><code>https://mp.weixin.qq.com/s/BaXK0dMu4whOrnKQbb6G-A</code></pre><p>Windows10之wsl-Linux子系统装置JDK、Maven环境</p><pre><code>https://mp.weixin.qq.com/s/Lq30469wZgikM72s8tv1ZA</code></pre><p>在浏览本文须要对Apache SeaTunne有一点理解</p><p>Apache SeaTunne简介</p><pre><code>https://mp.weixin.qq.com/s/uHZ-29OF-NawOL4oZW6z2A</code></pre><h2>2. 源码包下载</h2><pre><code>https://seatunnel.apache.org/downloadhttps://github.com/apache/seatunnelhttps://github.com/apache/seatunnel-web</code></pre><p>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源码<strong>Source Code</strong>包,本文应用的tag2.3.3的包来本地编译构建运行的,应用2.3.3-release分支版本不对立导致抵触,我狐疑这个2.3.3-release分支预计是他们的开发分支,所以这里是须要留神的,不然很难在本地搞起来,seatunnel-web我的项目拉取的是1.0.0-release分支的代码。</p><h2>3. idea我的项目配置</h2><h3>3.1 我的项目导入</h3><p>seatunnel解压门路如下:</p><p></p><p>seatunnel-web门路如下:</p><pre><code>git clone https://github.com/apache/seatunnel-web.gitgit checkout 1.0.0-release或者应用git拉取,git环境可要可不要</code></pre><p></p><h3>3.2 maven配置</h3><p>setting.xml配置</p><p>配置成阿里的maven仓库不便编译构建是下载拉取我的项目所需的依赖包</p><pre><code class=“xml”> <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></code></pre><p>idaea的maven配置</p><p></p><p>两个我的项目都是这种配置,这里抉择一个演示即可。</p><h3>3.3 我的项目JDK配置</h3><p></p><p></p><p>在project和SDKs选项中抉择配置下jdk,两个我的项目都是这种配置,这里抉择一个演示即可。</p><h3>3.4 我的项目启动参数配置</h3><h4>3.4.1 seatunnel我的项目启动参数配置</h4><p></p><p>jvm参数如下:编译的压缩包的解压门路</p><pre><code>-DSEATUNNEL_HOME=D:\developer\other-code\other\seatunnel\seatunnel-dist\target\apache-seatunnel-2.3.3</code></pre><p></p><p>我的项目编译后会输入到seatunnel-dist的target下</p><h4>3.4.2 seatunnel-web我的项目启动参数配置</h4><p></p><p></p><p>jvm参数和环境变量如下:</p><pre><code>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</code></pre><p>我的项目编译后会输入到seatunnel-web-dist的target下</p><h2>4. 源码编译运行</h2><h3>4.1 sql脚本执行</h3><p>脚本如下,复制进去执行即可:</p><p></p><p>数据库执行如下:</p><p></p><h3>4.2 编译构建</h3><h4>4.2.1 seatunnel编译构建</h4><p>jindodata先关的jar须要自行下载导入,在seatunnel-connectors-v2–>connector-file–>connector-file-jindo-oss的pom文件批改依赖如下:</p><pre><code class=“xml”> <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></code></pre><p>引入jindodata相干的本地依赖和打包插件,jindodata相干包会在文末分享给大家</p><p></p><p>批改seatunnel-hadoop3-3.1.4-uber的maven如下:</p><p></p><p>该包如果不批改间接引入会导致上面的类死活依赖不到,前面将改包放入到taget的解压门路下的lib外面不失效导致报错如下:</p><p></p><p>退出mysql8.x的连贯驱动包,这里不加的话,能够在解压的target目录下的lib中把这个jar包放进去,因为本文要进行的是mysql-jdbc—>mysql-jdbc的单表数据同步,所以须要这个jar包</p><p></p><p>seatunnel.yaml配置,这个根本默认即可</p><p></p><p>如果下载的是release领取的包或代码,须要在整个我的项目的pom中退出如下的配置:</p><pre><code class=“xml”> <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></code></pre><p>改插件配置是或略打包时候的gpg签名校验,不然会编译不通过,好多开源正规的我的项目都有这种签名校验的,所以须要退出这个插件才能够编译通过</p><h4>4.2.3 seatunnel-web编译构建</h4><p>seatunnel-server–>seatunnel-app–>pom退出mysql8.x的连贯驱动包,能够应用8.0.28的包</p><pre><code class=“xml”> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency></code></pre><p>批改seatunnel-app下的application.yml</p><p></p><p>将seatunnel我的项目外面编译到seatunnel-dist下target外面的解压文件外面的的hazelcast-client.yaml文件和connectors文件下的plugin-mapping.properties(这个文件曾经蕴含了,能够批改,正文外面的一些插件,放入本人须要的插件即可)文件拷贝到seatunnel-app的rusources外面,如上图所示.</p><p>plugin-mapping.properties配置文件批改只蕴含如下两个插件:</p><pre><code>seatunnel.source.Jdbc = connector-jdbcseatunnel.sink.Jdbc = connector-jdbc</code></pre><h3>4.3 编译打包命令</h3><pre><code>seatunnel我的项目运行这个:mvn clean package -pl seatunnel-dist -am -Dmaven.test.skip=trueseatunnel打包插件命令实例如下:mvn clean package -pl seatunnel-connectors-v2/connector-jdbc -am -DskipTests -T 1Cseatunnel-web我的项目运行这个:mvn clean package -pl seatunnel-web-dist -am -Dmaven.test.skip=true或者能够间接点击右侧maven的package打包即可</code></pre><p>对于这个编译构建的官网也有讲,上面两个连贯关上就有,须要认真的浏览</p><pre><code>https://seatunnel.apache.org/docs/2.3.3/contribution/setuphttps://github.com/apache/seatunnel-web</code></pre><h3>4.4 启动运行</h3><p>在启动前须要先启动本地的mysql8.x、hadoop3.1.3</p><p>在启动之前将如下的jar包放入到seatunnel和seatunnel-web编译构建的target的lib目录下,免得启动因为短少jar依赖而报错</p><p></p><p>或者是把我的项目中编译好的插件或数据源jar复制到这个两个我的项目的target的lib目录下也是能够的,下面的是我去阿里云maven仓库下载的</p><p>而后先启动seatunnel在启动seatunnel-web</p><p>前端ui编译启动</p><p>ui源码构建公布前须要批改拜访后端的端口号:</p><p></p><p>cmd进入到seatunnel-web—>seatunnel-ui</p><p>门路执行如下命令:</p><pre><code>npm installnpm run dev</code></pre><h3>4.5 拜访首页</h3><p>拜访地址:</p><pre><code>http://localhost:5173/用户名/明码都是admin</code></pre><p></p><h2>5. mysql-jdbc 到mysql-jdbc的单表数据同步</h2><h3>5.1 增加数据源</h3><p>如果创立不能够抉择阐明是对应的lib上面没有放入对应的数据源的插件jar包</p><p></p><h3>5.2 同步工作定义</h3><p>这里咱们增加的是两个mysql-jdbc的数据源,这里采纳工作类型是“数据集成”,mysql的单表同步到mysql的单表</p><p>将seatunnel库中的表role表同步到seatunnel_copy数据库中的role表中,seatunnel_copy数据库中的role表的构造和seatunnel库中的表role表构造截然不同</p><p>工作的source和sink的数据源如果不能够选,阐明是lib下没有数据源相干的jar,须要放入指定的jar重启我的项目才能够选数据源</p><p>source配置如下:</p><p></p><p>sink配置如下:</p><p></p><h3>5.3 同步工作执行</h3><p>保留抉择工作的类型应用的流式工作:(保留能够抉择流式工作也能够抉择批工作)</p><p></p><p></p><p>配置好工作之后,就能够点击运行按钮,执行完之后在“同步工作实例”列表中就能够看到之前的工作,状态是已实现</p><p></p><h3>5.4 同步工作执行遇到的问题</h3><p>如果状态执行不是已实现就会是一个以失败的状态,起因可能是短少jar包或者是本地短少hadoop3.1.3的环境,hadoop的环境官网的大佬说不是必须的,然而我在本地做这个案例的时候没有hadoop会执行报错的,所以下面seatunnel引擎的公共模块中的seatunnel.yaml配置外面配置了hdfs相干存储的信息,所以还须要去hdfs上新建一个目录如下:</p><p></p><p></p><p>这个目录不建设没有试过会不会报错,反正是有总比没有好,本地没有hapood会报如下谬误:</p><p></p><p>大抵上是工作在执行的时候须要做一些工作的检查点或保留点的数据状态的存储,下面那个报错感觉是执行了两次或者是多个线程执行过导致数据原本第一次是曾经同步过来了,前面有搞了一次就主键抵触导致工作状态变成失败了,有了hdfs就不会有这个报错的,也是很神奇。</p><h3>5.5 同步工作执行的后果</h3><p>能够看到seatunnel库中role表数据同步到seatunnel_copy数据库中的role表中了</p><h2>6. 总结</h2><p>本地源码编译运行曾经分享完了,这样做是为了更好的了解这个我的项目,你能够跑起来在idea中本地两边的我的项目打上断点,应用debug调试跟踪源码,能够开发一个插件或者是为这个我的项目奉献源码,或者是用于学习,通过观赏我的项目的源码来学习我的项目中的一些好的设计思路,我集体感觉这个我的项目的亮点有一下几点:</p><p><strong>第一</strong>:应用hazelcast(底层基于netty和socket)实现了内核集群,同时也能够应用hazelcast的代client向hazelcast引擎服务提交一个工作,而后该工作由web端或者是linux的控制台提交到引擎服务上(提交的工作是一个json的文件,外面定义好了input、transform和sink这三个阶段的信息),引擎服务又有master和work,主节点负责管理work节点的状态和任务调度(工作须要下发到那个work节点上执行,利用多机分布式来跑工作),并且会对工作做保留点or检查点(有点像fink的保留点和检查点的概念)。</p><p><strong>第二是插件机制</strong>:一个插件就是一个jar包,把公共的流程步骤高度形象封装到下层的api中,差异化的实现各种场景下的数据同步需要,数据源和插件是很丰盛的</p><p><strong>第三是类加载器</strong>:实现了本人的类加载器,我的项目启动就通过本人实现的类加载器加载指定门路下的插件jar包,就是通过这种插件的加载机制来实现按需加载,插件的机制就是上一个插件的输入作为下一个插件的输出,数据在一个插件链条上滚动传递,有点像设计模式中的责任链模式。</p><p><strong>第四是三套引擎</strong>:默认应用的是自研的SeaTunnelEngine,还反对flink和spark两大引擎。</p><h2>7.材料分享</h2><pre><code>链接:https://pan.baidu.com/s/1DWKpX2j5nyvDT3UucVc1Sg 提取码:ip7p</code></pre><p>seatunnel-2.3.3.zip是tag的源码包, apache-seatunnel-2.3.3-src.tar.gz这个是官网的download下载的sourceCode包。</p><blockquote>本文由 白鲸开源科技 提供公布反对!</blockquote></article>