This is an automated email from the ASF dual-hosted git repository.

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new 9bfdf22b BIGTOP-4322: Add SeaTunnel to extra stack (#148)
9bfdf22b is described below

commit 9bfdf22b1ae630255ed01591bc5e315c7d910a73
Author: ChunFuWu <[email protected]>
AuthorDate: Sat Jan 18 18:07:15 2025 +0800

    BIGTOP-4322: Add SeaTunnel to extra stack (#148)
---
 bigtop-manager-agent/pom.xml                       |   5 +
 .../configuration/hazelcast-client.yaml.xml        |  59 ++++++++
 .../configuration/hazelcast-master.yaml.xml        | 138 ++++++++++++++++++
 .../configuration/hazelcast-worker.yaml.xml        | 119 ++++++++++++++++
 .../seatunnel/configuration/jvm_client_options.xml |  56 ++++++++
 .../seatunnel/configuration/jvm_master_options.xml |  62 ++++++++
 .../seatunnel/configuration/jvm_worker_options.xml |  62 ++++++++
 .../seatunnel/configuration/log4j2.properties.xml  | 136 ++++++++++++++++++
 .../configuration/log4j2_client.properties.xml     | 114 +++++++++++++++
 .../seatunnel/configuration/seatunnel-env.sh.xml   |  59 ++++++++
 .../seatunnel/configuration/seatunnel.yaml.xml     | 131 +++++++++++++++++
 .../extra/1.0.0/services/seatunnel/metainfo.xml    |  69 +++++++++
 .../extra/1.0.0/services/seatunnel/order.json      |   8 ++
 .../bigtop-manager-stack-extra/pom.xml             |  38 +++++
 .../manager/stack/extra/param/ExtraParams.java     |  32 +++++
 .../v1_0_0/seatunnel/SeaTunnelClientScript.java    |  52 +++++++
 .../v1_0_0/seatunnel/SeaTunnelMasterScript.java    | 116 +++++++++++++++
 .../extra/v1_0_0/seatunnel/SeaTunnelParams.java    | 156 +++++++++++++++++++++
 .../extra/v1_0_0/seatunnel/SeaTunnelSetup.java     | 153 ++++++++++++++++++++
 .../v1_0_0/seatunnel/SeaTunnelWorkerScript.java    | 116 +++++++++++++++
 bigtop-manager-stack/pom.xml                       |   1 +
 pom.xml                                            |   6 +
 22 files changed, 1688 insertions(+)

diff --git a/bigtop-manager-agent/pom.xml b/bigtop-manager-agent/pom.xml
index 7923b0f9..a2cdec09 100644
--- a/bigtop-manager-agent/pom.xml
+++ b/bigtop-manager-agent/pom.xml
@@ -68,6 +68,11 @@
             <artifactId>bigtop-manager-stack-infra</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.bigtop</groupId>
+            <artifactId>bigtop-manager-stack-extra</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-client.yaml.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-client.yaml.xml
new file mode 100644
index 00000000..af46a5f1
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-client.yaml.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for seatunnel-env.sh 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+hazelcast-client:
+  cluster-name: ${seatunnel_cluster_name}
+  properties:
+    hazelcast.logging.type: log4j2
+  connection-strategy:
+    connection-retry:
+      cluster-connect-timeout-millis: 3000
+  network:
+    cluster-members:
+${cluster_master_host_port}
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-master.yaml.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-master.yaml.xml
new file mode 100644
index 00000000..00bf846b
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-master.yaml.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>seatunnel_master_network_rest_api_enabled</name>
+        <value>true</value>
+    </property>
+    <property>
+        <name>seatunnel_master_network_rest_api_cluster_write_enabled</name>
+        <value>true</value>
+    </property>
+    <property>
+        <name>seatunnel_master_network_rest_api_data_enabled</name>
+        <value>true</value>
+    </property>
+    <property>
+        <name>seatunnel_master_network_join_enabled</name>
+        <value>true</value>
+    </property>
+    <property>
+        <name>seatunnel_master_port_auto_increment</name>
+        <value>false</value>
+    </property>
+    <property>
+        <name>seatunnel_master_port</name>
+        <value>5801</value>
+    </property>
+    <property>
+        <name>seatunnel_master_hazelcast_invocation_max_retry_count</name>
+        <value>20</value>
+    </property>
+    <property>
+        <name>seatunnel_master_hazelcast_tcp_join_port_try_count</name>
+        <value>30</value>
+    </property>
+    <property>
+        <name>seatunnel_master_hazelcast_operation_generic_thread_count</name>
+        <value>50</value>
+    </property>
+    <property>
+        <name>seatunnel_master_hazelcast_heartbeat_failuredetector_type</name>
+        <value>phi-accrual</value>
+    </property>
+    <property>
+        <name>seatunnel_master_hazelcast_heartbeat_interval_seconds</name>
+        <value>2</value>
+    </property>
+    <property>
+        <name>seatunnel_master_hazelcast_max_no_heartbeat_seconds</name>
+        <value>180</value>
+    </property>
+    <property>
+        
<name>seatunnel_master_hazelcast_heartbeat_phiaccrual_failuredetector_threshold</name>
+        <value>10</value>
+    </property>
+    <property>
+        
<name>seatunnel_master_hazelcast_heartbeat_phiaccrual_failuredetector_sample_size</name>
+        <value>200</value>
+    </property>
+    <property>
+        
<name>seatunnel_master_hazelcast_heartbeat_phiaccrual_failuredetector_min_std_dev_millis</name>
+        <value>100</value>
+    </property>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for seatunnel-env.sh 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+hazelcast:
+  cluster-name: ${seatunnel_cluster_name}
+  network:
+    rest-api:
+      enabled: ${seatunnel_master_network_rest_api_enabled?string}
+      endpoint-groups:
+        CLUSTER_WRITE:
+          enabled: 
${seatunnel_master_network_rest_api_cluster_write_enabled?string}
+        DATA:
+          enabled: ${seatunnel_master_network_rest_api_data_enabled?string}
+    join:
+      tcp-ip:
+        enabled: ${seatunnel_master_network_join_enabled?string}
+        member-list:
+${cluster_master_worker_host_port}
+    port:
+      auto-increment: ${seatunnel_master_port_auto_increment?string}
+      port: ${seatunnel_master_port}
+  properties:
+    hazelcast.invocation.max.retry.count: 
${seatunnel_master_hazelcast_invocation_max_retry_count}
+    hazelcast.tcp.join.port.try.count: 
${seatunnel_master_hazelcast_tcp_join_port_try_count}
+    hazelcast.logging.type: log4j2
+    hazelcast.operation.generic.thread.count: 
${seatunnel_master_hazelcast_operation_generic_thread_count}
+    hazelcast.heartbeat.failuredetector.type: 
${seatunnel_master_hazelcast_heartbeat_failuredetector_type}
+    hazelcast.heartbeat.interval.seconds: 
${seatunnel_master_hazelcast_heartbeat_interval_seconds}
+    hazelcast.max.no.heartbeat.seconds: 
${seatunnel_master_hazelcast_max_no_heartbeat_seconds}
+    hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 
${seatunnel_master_hazelcast_heartbeat_phiaccrual_failuredetector_threshold}
+    hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 
${seatunnel_master_hazelcast_heartbeat_phiaccrual_failuredetector_sample_size}
+    hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 
${seatunnel_master_hazelcast_heartbeat_phiaccrual_failuredetector_min_std_dev_millis}
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-worker.yaml.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-worker.yaml.xml
new file mode 100644
index 00000000..7f1d2981
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/hazelcast-worker.yaml.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>seatunnel_worker_network_join_enabled</name>
+        <value>true</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_port_auto_increment</name>
+        <value>false</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_port</name>
+        <value>5802</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_hazelcast_invocation_max_retry_count</name>
+        <value>20</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_hazelcast_tcp_join_port_try_count</name>
+        <value>30</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_hazelcast_operation_generic_thread_count</name>
+        <value>50</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_hazelcast_heartbeat_failuredetector_type</name>
+        <value>phi-accrual</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_hazelcast_heartbeat_interval_seconds</name>
+        <value>2</value>
+    </property>
+    <property>
+        <name>seatunnel_worker_hazelcast_max_no_heartbeat_seconds</name>
+        <value>180</value>
+    </property>
+    <property>
+        
<name>seatunnel_worker_hazelcast_heartbeat_phiaccrual_failuredetector_threshold</name>
+        <value>10</value>
+    </property>
+    <property>
+        
<name>seatunnel_worker_hazelcast_heartbeat_phiaccrual_failuredetector_sample_size</name>
+        <value>200</value>
+    </property>
+    <property>
+        
<name>seatunnel_worker_hazelcast_heartbeat_phiaccrual_failuredetector_min_std_dev_millis</name>
+        <value>100</value>
+    </property>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for seatunnel-env.sh 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+hazelcast:
+  cluster-name: ${seatunnel_cluster_name}
+  network:
+    join:
+      tcp-ip:
+        enabled: ${seatunnel_worker_network_join_enabled?string}
+        member-list:
+${cluster_master_worker_host_port}
+    port:
+      auto-increment: ${seatunnel_worker_port_auto_increment?string}
+      port: ${seatunnel_worker_port}
+  properties:
+    hazelcast.invocation.max.retry.count: 
${seatunnel_worker_hazelcast_invocation_max_retry_count}
+    hazelcast.tcp.join.port.try.count: 
${seatunnel_worker_hazelcast_tcp_join_port_try_count}
+    hazelcast.logging.type: log4j2
+    hazelcast.operation.generic.thread.count: 
${seatunnel_worker_hazelcast_operation_generic_thread_count}
+    hazelcast.heartbeat.failuredetector.type: 
${seatunnel_worker_hazelcast_heartbeat_failuredetector_type}
+    hazelcast.heartbeat.interval.seconds: 
${seatunnel_worker_hazelcast_heartbeat_interval_seconds}
+    hazelcast.max.no.heartbeat.seconds: 
${seatunnel_worker_hazelcast_max_no_heartbeat_seconds}
+    hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 
${seatunnel_worker_hazelcast_heartbeat_phiaccrual_failuredetector_threshold}
+    hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 
${seatunnel_worker_hazelcast_heartbeat_phiaccrual_failuredetector_sample_size}
+    hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 
${seatunnel_worker_hazelcast_heartbeat_phiaccrual_failuredetector_min_std_dev_millis}
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_client_options.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_client_options.xml
new file mode 100644
index 00000000..a77c2ecb
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_client_options.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for jvm_client_options 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# JVM Heap
+-Xms256m
+-Xmx512m
+
+# JVM Dump
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:HeapDumpPath=/tmp/seatunnel/dump/zeta-client
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_master_options.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_master_options.xml
new file mode 100644
index 00000000..2576af69
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_master_options.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for jvm_master_options 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# JVM Heap
+-Xms1g
+-Xmx1g
+
+# JVM Dump
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:HeapDumpPath=/tmp/seatunnel/dump/zeta-server
+
+# Metaspace
+-XX:MaxMetaspaceSize=2g
+
+# G1GC
+-XX:+UseG1GC
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_worker_options.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_worker_options.xml
new file mode 100644
index 00000000..40437ad9
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/jvm_worker_options.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for jvm_worker_options 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# JVM Heap
+-Xms1g
+-Xmx1g
+
+# JVM Dump
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:HeapDumpPath=/tmp/seatunnel/dump/zeta-worker
+
+# Metaspace
+-XX:MaxMetaspaceSize=2g
+
+# G1GC
+-XX:+UseG1GC
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/log4j2.properties.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/log4j2.properties.xml
new file mode 100644
index 00000000..fb97d9da
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/log4j2.properties.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for log4j2.properties 
file</description>
+        <value><![CDATA[
+<#noparse>
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# The minimum amount of time, in seconds, that must elapse before the file 
configuration is checked for changes.
+monitorInterval = 60
+
+property.file_path = ${sys:seatunnel.logs.path:-/tmp/seatunnel/logs}
+property.file_name = ${sys:seatunnel.logs.file_name:-seatunnel}
+property.file_split_size = 100MB
+property.file_count = 100
+property.file_ttl = 7d
+
+rootLogger.level = INFO
+
+logger.zeta.name=org.apache.seatunnel.engine
+logger.zeta.level=INFO
+
+logger.debezium.name=io.debezium.connector
+logger.debezium.level=WARN
+
+############################ log output to console 
#############################
+#rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+#rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+############################ log output to console 
#############################
+############################ log output to file    
#############################
+rootLogger.appenderRef.file.ref = fileAppender
+############################ log output to file    
#############################
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = [%X{ST-JID}] %d{yyyy-MM-dd 
HH:mm:ss,SSS} %-5p [%-30.30c{1.}] [%t] - %m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = [%X{ST-JID}] %d{yyyy-MM-dd 
HH:mm:ss,SSS} %-5p [%-30.30c{1.}] [%t] - %m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
+
+appender.routing.name = routingAppender
+appender.routing.type = Routing
+appender.routing.purge.type = IdlePurgePolicy
+appender.routing.purge.timeToLive = 60
+appender.routing.route.type = Routes
+appender.routing.route.pattern = $${ctx:ST-JID}
+appender.routing.route.system.type = Route
+appender.routing.route.system.key = $${ctx:ST-JID}
+appender.routing.route.system.ref = fileAppender
+appender.routing.route.job.type = Route
+appender.routing.route.job.appender.type = File
+appender.routing.route.job.appender.name = job-${ctx:ST-JID}
+appender.routing.route.job.appender.fileName = 
${file_path}/job-${ctx:ST-JID}.log
+appender.routing.route.job.appender.layout.type = PatternLayout
+appender.routing.route.job.appender.layout.pattern = %d{yyyy-MM-dd 
HH:mm:ss,SSS} %-5p [%-30.30c{1.}] [%t] - %m%n
+
+appender.file.name = fileAppender
+appender.file.type = RollingFile
+appender.file.fileName = ${file_path}/${file_name}.log
+appender.file.filePattern = ${file_path}/${file_name}.log.%d{yyyy-MM-dd}-%i
+appender.file.append = true
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = [%X{ST-JID}] %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p 
[%-30.30c{1.}] [%t] - %m%n
+appender.file.policies.type = Policies
+appender.file.policies.time.type = TimeBasedTriggeringPolicy
+appender.file.policies.time.modulate = true
+appender.file.policies.size.type = SizeBasedTriggeringPolicy
+appender.file.policies.size.size = ${file_split_size}
+appender.file.strategy.type = DefaultRolloverStrategy
+appender.file.strategy.fileIndex = nomax
+appender.file.strategy.action.type = Delete
+appender.file.strategy.action.basepath = ${file_path}
+appender.file.strategy.action.maxDepth = 1
+appender.file.strategy.action.condition.type = IfFileName
+appender.file.strategy.action.condition.glob = ${file_name}.log*
+appender.file.strategy.action.condition.nested_condition.type = IfAny
+appender.file.strategy.action.condition.nested_condition.lastModify.type = 
IfLastModified
+appender.file.strategy.action.condition.nested_condition.lastModify.age = 
${file_ttl}
+appender.file.strategy.action.condition.nested_condition.fileCount.type = 
IfAccumulatedFileCount
+appender.file.strategy.action.condition.nested_condition.fileCount.exceeds = 
${file_count}
+</#noparse>
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/log4j2_client.properties.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/log4j2_client.properties.xml
new file mode 100644
index 00000000..366664e1
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/log4j2_client.properties.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for 
log4j2_client.properties file</description>
+        <value><![CDATA[
+<#noparse>
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# The minimum amount of time, in seconds, that must elapse before the file 
configuration is checked for changes.
+monitorInterval = 60
+
+property.file_path = ${sys:seatunnel.logs.path:-/tmp/seatunnel/logs}
+property.file_name = ${sys:seatunnel.logs.file_name:-seatunnel}
+property.file_split_size = 100MB
+property.file_count = 100
+property.file_ttl = 7d
+
+rootLogger.level = INFO
+
+############################ log output to console 
#############################
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+############################ log output to console 
#############################
+############################ log output to file    
#############################
+#rootLogger.appenderRef.file.ref = fileAppender
+############################ log output to file    
#############################
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p 
[%-30.30c{1.}] [%t] - %m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p 
[%-30.30c{1.}] [%t] - %m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
+
+#appender.file.name = fileAppender
+#appender.file.type = RollingFile
+#appender.file.fileName = ${file_path}/${file_name}.log
+#appender.file.filePattern = ${file_path}/${file_name}.log.%d{yyyy-MM-dd}-%i
+#appender.file.append = true
+#appender.file.layout.type = PatternLayout
+#appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p 
[%-30.30c{1.}] [%t] - %m%n
+#appender.file.policies.type = Policies
+#appender.file.policies.time.type = TimeBasedTriggeringPolicy
+#appender.file.policies.time.modulate = true
+#appender.file.policies.size.type = SizeBasedTriggeringPolicy
+#appender.file.policies.size.size = ${file_split_size}
+#appender.file.strategy.type = DefaultRolloverStrategy
+#appender.file.strategy.fileIndex = nomax
+#appender.file.strategy.action.type = Delete
+#appender.file.strategy.action.basepath = ${file_path}
+#appender.file.strategy.action.maxDepth = 1
+#appender.file.strategy.action.condition.type = IfFileName
+#appender.file.strategy.action.condition.glob = ${file_name}.log*
+#appender.file.strategy.action.condition.nested_condition.type = IfAny
+#appender.file.strategy.action.condition.nested_condition.lastModify.type = 
IfLastModified
+#appender.file.strategy.action.condition.nested_condition.lastModify.age = 
${file_ttl}
+#appender.file.strategy.action.condition.nested_condition.fileCount.type = 
IfAccumulatedFileCount
+#appender.file.strategy.action.condition.nested_condition.fileCount.exceeds = 
${file_count}
+</#noparse>
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/seatunnel-env.sh.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/seatunnel-env.sh.xml
new file mode 100644
index 00000000..cfbf2e24
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/seatunnel-env.sh.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for seatunnel-env.sh 
file</description>
+        <value><![CDATA[
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# The java implementation to use.
+export JAVA_HOME=${java_home}
+
+export SEATUNNEL_HOME=${seatunnel_home}
+
+# Home directory of spark distribution.
+SPARK_HOME=${spark_home}
+# Home directory of flink distribution.
+FLINK_HOME=${flink_home}
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/seatunnel.yaml.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/seatunnel.yaml.xml
new file mode 100644
index 00000000..b98f2023
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/configuration/seatunnel.yaml.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<configuration>
+    <property>
+        <name>seatunnel_cluster_name</name>
+        <value>seatunnel</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_history_job_expire_minutes</name>
+        <value>1440</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_backup_count</name>
+        <value>1</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_queue_type</name>
+        <value>blockingqueue</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_print_execution_info_interval</name>
+        <value>60</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_print_job_metrics_info_interval</name>
+        <value>60</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_slot_service_dynamic_slot</name>
+        <value>true</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_checkpoint_interval</name>
+        <value>10000</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_checkpoint_timeout</name>
+        <value>60000</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_checkpoint_storage_type</name>
+        <value>hdfs</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_checkpoint_storage_max_retained</name>
+        <value>3</value>
+    </property>
+    <property>
+        
<name>seatunnel_engine_checkpoint_storage_plugin_config_namespace</name>
+        <value>/tmp/seatunnel/checkpoint_snapshot</value>
+    </property>
+    <property>
+        
<name>seatunnel_engine_checkpoint_storage_plugin_config_storage_type</name>
+        <value>hdfs</value>
+    </property>
+    <property>
+        
<name>seatunnel_engine_checkpoint_storage_plugin_config_fs_defaultFS</name>
+        <value>file:///tmp/</value>
+    </property>
+    <property>
+        <name>seatunnel_engine_telemetry_metric_enabled</name>
+        <value>false</value>
+    </property>
+    <property>
+        <name>content</name>
+        <description>This is the freemarker template for seatunnel-env.sh 
file</description>
+        <value><![CDATA[
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+seatunnel:
+  engine:
+    history-job-expire-minutes: ${seatunnel_engine_history_job_expire_minutes}
+    backup-count: ${seatunnel_engine_backup_count}
+    queue-type: ${seatunnel_engine_queue_type}
+    print-execution-info-interval: 
${seatunnel_engine_print_execution_info_interval}
+    print-job-metrics-info-interval: 
${seatunnel_engine_print_job_metrics_info_interval}
+    slot-service:
+      dynamic-slot: ${seatunnel_engine_slot_service_dynamic_slot?string}
+    checkpoint:
+      interval: ${seatunnel_engine_checkpoint_interval}
+      timeout: ${seatunnel_engine_checkpoint_timeout}
+      storage:
+        type: ${seatunnel_engine_checkpoint_storage_type}
+        max-retained: ${seatunnel_engine_checkpoint_storage_max_retained}
+        plugin-config:
+          namespace: 
${seatunnel_engine_checkpoint_storage_plugin_config_namespace}
+          storage.type: 
${seatunnel_engine_checkpoint_storage_plugin_config_storage_type}
+          fs.defaultFS: 
${seatunnel_engine_checkpoint_storage_plugin_config_fs_defaultFS}
+    telemetry:
+      metric:
+        enabled: ${seatunnel_engine_telemetry_metric_enabled?string}
+]]>
+        </value>
+        <attrs>
+            <type>longtext</type>
+        </attrs>
+    </property>
+</configuration>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/metainfo.xml
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/metainfo.xml
new file mode 100644
index 00000000..fc91a521
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/metainfo.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<metainfo>
+    <service>
+        <name>seatunnel</name>
+        <display-name>SeaTunnel</display-name>
+        <desc>
+            SeaTunnel is a next-generation, high-performance, distributed data 
integration tool, capable of synchronizing vast amounts of data daily. It's 
trusted by numerous companies for its efficiency and stability.
+        </desc>
+        <version>2.3.8</version>
+        <user>seatunnel</user>
+
+        <components>
+            <component>
+                <name>seatunnel_master</name>
+                <display-name>SeaTunnel Master</display-name>
+                <category>server</category>
+                <cardinality>1+</cardinality>
+            </component>
+
+            <component>
+                <name>seatunnel_worker</name>
+                <display-name>SeaTunnel Worker</display-name>
+                <category>server</category>
+                <cardinality>1+</cardinality>
+            </component>
+            
+            <component>
+                <name>seatunnel_client</name>
+                <display-name>SeaTunnel Client</display-name>
+                <category>client</category>
+                <cardinality>1+</cardinality>
+            </component>
+        </components>
+
+        <package-specifics>
+            <package-specific>
+                <architectures>
+                    <arch>x86_64</arch>
+                    <arch>aarch64</arch>
+                </architectures>
+                <packages>
+                    <package>
+                        <name>apache-seatunnel-2.3.8-bin.tar.gz</name>
+                        
<checksum>SHA-256:68a27d7370bd1098754948a482c054b97115676ca104f44c7bdf3aa6fdf88a3b</checksum>
+                    </package>
+                </packages>
+            </package-specific>
+        </package-specifics>
+    </service>
+</metainfo>
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/order.json
 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/order.json
new file mode 100644
index 00000000..7c143623
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/seatunnel/order.json
@@ -0,0 +1,8 @@
+{
+  "SEATUNNEL_WORKER-START": [
+    "SEATUNNEL_MASTER-START"
+  ],
+  "SEATUNNEL_MASTER-STOP": [
+    "SEATUNNEL_WORKER-STOP"
+  ]
+}
diff --git a/bigtop-manager-stack/bigtop-manager-stack-extra/pom.xml 
b/bigtop-manager-stack/bigtop-manager-stack-extra/pom.xml
new file mode 100644
index 00000000..6666ed4f
--- /dev/null
+++ b/bigtop-manager-stack/bigtop-manager-stack-extra/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~    https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.bigtop</groupId>
+        <artifactId>bigtop-manager-stack</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>bigtop-manager-stack-extra</artifactId>
+    <name>${project.artifactId}</name>
+    <description>Bigtop Manager Stack Extra</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.bigtop</groupId>
+            <artifactId>bigtop-manager-stack-core</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/param/ExtraParams.java
 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/param/ExtraParams.java
new file mode 100644
index 00000000..79c6c7d8
--- /dev/null
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/param/ExtraParams.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.stack.extra.param;
+
+import org.apache.bigtop.manager.common.message.entity.payload.CommandPayload;
+import org.apache.bigtop.manager.stack.core.spi.param.BaseParams;
+
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+public abstract class ExtraParams extends BaseParams {
+
+    protected ExtraParams(CommandPayload commandPayload) {
+        super(commandPayload);
+    }
+}
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelClientScript.java
 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelClientScript.java
new file mode 100644
index 00000000..85da982d
--- /dev/null
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelClientScript.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.stack.extra.v1_0_0.seatunnel;
+
+import org.apache.bigtop.manager.common.shell.ShellResult;
+import org.apache.bigtop.manager.stack.core.spi.param.Params;
+import org.apache.bigtop.manager.stack.core.spi.script.AbstractClientScript;
+import org.apache.bigtop.manager.stack.core.spi.script.Script;
+
+import com.google.auto.service.AutoService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Properties;
+
+@Slf4j
+@AutoService(Script.class)
+public class SeaTunnelClientScript extends AbstractClientScript {
+
+    @Override
+    public ShellResult add(Params params) {
+        Properties properties = new Properties();
+        properties.setProperty(PROPERTY_KEY_SKIP_LEVELS, "1");
+
+        return super.add(params, properties);
+    }
+
+    @Override
+    public ShellResult configure(Params params) {
+        return SeaTunnelSetup.config(params);
+    }
+
+    @Override
+    public String getComponentName() {
+        return "seatunnel_client";
+    }
+}
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelMasterScript.java
 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelMasterScript.java
new file mode 100644
index 00000000..85d4d39d
--- /dev/null
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelMasterScript.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.stack.extra.v1_0_0.seatunnel;
+
+import org.apache.bigtop.manager.common.shell.ShellExecutor;
+import org.apache.bigtop.manager.common.shell.ShellResult;
+import org.apache.bigtop.manager.stack.core.exception.StackException;
+import org.apache.bigtop.manager.stack.core.spi.param.Params;
+import org.apache.bigtop.manager.stack.core.spi.script.AbstractServerScript;
+import org.apache.bigtop.manager.stack.core.spi.script.Script;
+import org.apache.bigtop.manager.stack.core.utils.linux.LinuxOSUtils;
+
+import com.google.auto.service.AutoService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+@Slf4j
+@AutoService(Script.class)
+public class SeaTunnelMasterScript extends AbstractServerScript {
+
+    @Override
+    public ShellResult add(Params params) {
+        Properties properties = new Properties();
+        properties.setProperty(PROPERTY_KEY_SKIP_LEVELS, "1");
+
+        return super.add(params, properties);
+    }
+
+    @Override
+    public ShellResult configure(Params params) {
+        return SeaTunnelSetup.config(params);
+    }
+
+    @Override
+    public ShellResult start(Params params) {
+        configure(params);
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String cmd = MessageFormat.format("{0}/bin/seatunnel-cluster.sh -d -r 
master", seatunnelParams.serviceHome());
+        try {
+            ShellResult shellResult = LinuxOSUtils.sudoExecCmd(cmd, 
seatunnelParams.user());
+            if (shellResult.getExitCode() != 0) {
+                throw new StackException("Failed to start seatunnel master: 
{0}", shellResult.getErrMsg());
+            }
+            long startTime = System.currentTimeMillis();
+            long maxWaitTime = 5000;
+            long pollInterval = 500;
+
+            while (System.currentTimeMillis() - startTime < maxWaitTime) {
+                ShellResult statusResult = status(params);
+                if (statusResult.getExitCode() == 0) {
+                    return statusResult;
+                }
+                Thread.sleep(pollInterval);
+            }
+            return status(params);
+        } catch (Exception e) {
+            throw new StackException(e);
+        }
+    }
+
+    @Override
+    public ShellResult stop(Params params) {
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String cmd = MessageFormat.format(
+                "ps -ef | grep -v grep | grep {0} | grep master | cut -d' ' 
-f2 | xargs kill -9",
+                seatunnelParams.serviceHome());
+        try {
+            return LinuxOSUtils.sudoExecCmd(cmd, seatunnelParams.user());
+        } catch (Exception e) {
+            throw new StackException(e);
+        }
+    }
+
+    @Override
+    public ShellResult status(Params params) {
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String cmd =
+                MessageFormat.format("ps -ef | grep -v grep | grep {0} | grep 
master", seatunnelParams.serviceHome());
+        try {
+            List<String> builderParameters = Arrays.asList("sh", "-c", cmd);
+            ShellResult result = ShellExecutor.execCommand(builderParameters);
+            if (result.getExitCode() == 0) {
+                return ShellResult.success();
+            } else {
+                return new ShellResult(-1, "", "SeaTunnel master is not 
running");
+            }
+        } catch (Exception e) {
+            throw new StackException(e);
+        }
+    }
+
+    @Override
+    public String getComponentName() {
+        return "seatunnel_master";
+    }
+}
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelParams.java
 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelParams.java
new file mode 100644
index 00000000..a4d3b226
--- /dev/null
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelParams.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.stack.extra.v1_0_0.seatunnel;
+
+import org.apache.bigtop.manager.common.message.entity.payload.CommandPayload;
+import org.apache.bigtop.manager.stack.core.annotations.GlobalParams;
+import org.apache.bigtop.manager.stack.core.spi.param.Params;
+import org.apache.bigtop.manager.stack.core.utils.LocalSettings;
+import org.apache.bigtop.manager.stack.extra.param.ExtraParams;
+
+import com.google.auto.service.AutoService;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+
+@Slf4j
+@Getter
+@NoArgsConstructor
+@AutoService(Params.class)
+public class SeaTunnelParams extends ExtraParams {
+
+    private String seatunnelContent;
+    private String seatunnelEnvContent;
+    private String seatunnelMasterPort;
+    private String seatunnelMasterContent;
+    private String seatunnelWorkerPort;
+    private String seatunnelWorkerContent;
+    private String seatunnelClientContent;
+    private String jvmMasterOptionsContent;
+    private String jvmWorkerOptionsContent;
+    private String jvmClientOptionsContent;
+    private String log4j2Content;
+    private String log4j2ClientContent;
+
+    public SeaTunnelParams(CommandPayload commandPayload) {
+        super(commandPayload);
+        globalParamsMap.put("java_home", javaHome());
+        globalParamsMap.put("seatunnel_user", user());
+        globalParamsMap.put("seatunnel_group", group());
+        globalParamsMap.put("seatunnel_home", serviceHome());
+        globalParamsMap.put("seatunnel_conf_dir", confDir());
+        globalParamsMap.put("spark_home", sparkHome());
+        globalParamsMap.put("flink_home", flinkHome());
+    }
+
+    @Override
+    public String getServiceName() {
+        return "seatunnel";
+    }
+
+    @Override
+    public String confDir() {
+        return serviceHome() + "/config";
+    }
+
+    public String sparkHome() {
+        return stackHome() + "/spark";
+    }
+
+    public String flinkHome() {
+        return stackHome() + "/flink";
+    }
+
+    @GlobalParams
+    public Map<String, Object> seatunnel() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "seatunnel.yaml");
+        seatunnelContent = configuration.get("content").toString();
+        globalParamsMap.put(
+                "seatunnel_cluster_name",
+                configuration.get("seatunnel_cluster_name").toString());
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> seatunnelEnv() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "seatunnel-env.sh");
+        seatunnelEnvContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> seatunnelMaster() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "hazelcast-master.yaml");
+        seatunnelMasterPort = 
configuration.get("seatunnel_master_port").toString();
+        seatunnelMasterContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> seatunnelWorker() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "hazelcast-worker.yaml");
+        seatunnelWorkerPort = 
configuration.get("seatunnel_worker_port").toString();
+        seatunnelWorkerContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> seatunnelClient() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "hazelcast-client.yaml");
+        seatunnelClientContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> jvmMasterOptions() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "jvm_master_options");
+        jvmMasterOptionsContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> jvmWorkerOptions() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "jvm_worker_options");
+        jvmWorkerOptionsContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> jvmClientOptions() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "jvm_client_options");
+        jvmClientOptionsContent = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> log4j2() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "log4j2.properties");
+        log4j2Content = configuration.get("content").toString();
+        return configuration;
+    }
+
+    @GlobalParams
+    public Map<String, Object> log4j2Client() {
+        Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "log4j2_client.properties");
+        log4j2ClientContent = configuration.get("content").toString();
+        return configuration;
+    }
+}
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelSetup.java
 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelSetup.java
new file mode 100644
index 00000000..dfa70540
--- /dev/null
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelSetup.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.stack.extra.v1_0_0.seatunnel;
+
+import org.apache.bigtop.manager.common.constants.Constants;
+import org.apache.bigtop.manager.common.shell.ShellResult;
+import org.apache.bigtop.manager.stack.core.spi.param.Params;
+import org.apache.bigtop.manager.stack.core.utils.LocalSettings;
+import org.apache.bigtop.manager.stack.core.utils.linux.LinuxFileUtils;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+
+@Slf4j
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class SeaTunnelSetup {
+
+    public static ShellResult config(Params params) {
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String user = seatunnelParams.user();
+        String group = seatunnelParams.group();
+
+        List<String> masterHostPortList = hostPort("seatunnel_master", 
seatunnelParams.getSeatunnelMasterPort(), 10);
+        List<String> workerHostPortList = hostPort("seatunnel_worker", 
seatunnelParams.getSeatunnelWorkerPort(), 10);
+        List<String> clientHostPortList = hostPort("seatunnel_master", 
seatunnelParams.getSeatunnelMasterPort(), 6);
+
+        List<String> masterWorkerHostPortList = 
Stream.concat(masterHostPortList.stream(), workerHostPortList.stream())
+                .toList();
+        String clusterMasterWorkerHostPort = String.join("\n", 
masterWorkerHostPortList);
+        String clusterMasterHostPort = String.join("\n", clientHostPortList);
+
+        Map<String, Object> globalParamsMap = 
seatunnelParams.getGlobalParamsMap();
+        globalParamsMap.put("cluster_master_worker_host_port", 
clusterMasterWorkerHostPort);
+        globalParamsMap.put("cluster_master_host_port", clusterMasterHostPort);
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getSeatunnelContent(),
+                MessageFormat.format("{0}/seatunnel.yaml", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getSeatunnelEnvContent(),
+                MessageFormat.format("{0}/seatunnel-env.sh", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getSeatunnelMasterContent(),
+                MessageFormat.format("{0}/hazelcast-master.yaml", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                globalParamsMap);
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getSeatunnelWorkerContent(),
+                MessageFormat.format("{0}/hazelcast-worker.yaml", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                globalParamsMap);
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getSeatunnelClientContent(),
+                MessageFormat.format("{0}/hazelcast-client.yaml", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                globalParamsMap);
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getJvmMasterOptionsContent(),
+                MessageFormat.format("{0}/jvm_master_options", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getJvmWorkerOptionsContent(),
+                MessageFormat.format("{0}/jvm_worker_options", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getJvmClientOptionsContent(),
+                MessageFormat.format("{0}/jvm_client_options", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getLog4j2Content(),
+                MessageFormat.format("{0}/log4j2.properties", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        LinuxFileUtils.toFileByTemplate(
+                seatunnelParams.getLog4j2ClientContent(),
+                MessageFormat.format("{0}/log4j2_client.properties", 
seatunnelParams.confDir()),
+                user,
+                group,
+                Constants.PERMISSION_644,
+                seatunnelParams.getGlobalParamsMap());
+
+        return ShellResult.success("SeaTunnel Configure success!");
+    }
+
+    private static List<String> hostPort(String componentName, String port, 
int spacesNum) {
+        String spaces = " ".repeat(spacesNum);
+        List<String> hostList = LocalSettings.hosts(componentName);
+        hostList.sort(String::compareToIgnoreCase);
+        List<String> hostPortList = new ArrayList<>();
+        for (String host : hostList) {
+            String format = MessageFormat.format("{0}- {1}:{2}", spaces, host, 
port);
+            hostPortList.add(format);
+        }
+        return hostPortList;
+    }
+}
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelWorkerScript.java
 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelWorkerScript.java
new file mode 100644
index 00000000..e3c8680d
--- /dev/null
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-extra/src/main/java/org/apache/bigtop/manager/stack/extra/v1_0_0/seatunnel/SeaTunnelWorkerScript.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.stack.extra.v1_0_0.seatunnel;
+
+import org.apache.bigtop.manager.common.shell.ShellExecutor;
+import org.apache.bigtop.manager.common.shell.ShellResult;
+import org.apache.bigtop.manager.stack.core.exception.StackException;
+import org.apache.bigtop.manager.stack.core.spi.param.Params;
+import org.apache.bigtop.manager.stack.core.spi.script.AbstractServerScript;
+import org.apache.bigtop.manager.stack.core.spi.script.Script;
+import org.apache.bigtop.manager.stack.core.utils.linux.LinuxOSUtils;
+
+import com.google.auto.service.AutoService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+@Slf4j
+@AutoService(Script.class)
+public class SeaTunnelWorkerScript extends AbstractServerScript {
+
+    @Override
+    public ShellResult add(Params params) {
+        Properties properties = new Properties();
+        properties.setProperty(PROPERTY_KEY_SKIP_LEVELS, "1");
+
+        return super.add(params, properties);
+    }
+
+    @Override
+    public ShellResult configure(Params params) {
+        return SeaTunnelSetup.config(params);
+    }
+
+    @Override
+    public ShellResult start(Params params) {
+        configure(params);
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String cmd = MessageFormat.format("{0}/bin/seatunnel-cluster.sh -d -r 
worker", seatunnelParams.serviceHome());
+        try {
+            ShellResult shellResult = LinuxOSUtils.sudoExecCmd(cmd, 
seatunnelParams.user());
+            if (shellResult.getExitCode() != 0) {
+                throw new StackException("Failed to start seatunnel worker: 
{0}", shellResult.getErrMsg());
+            }
+            long startTime = System.currentTimeMillis();
+            long maxWaitTime = 5000;
+            long pollInterval = 500;
+
+            while (System.currentTimeMillis() - startTime < maxWaitTime) {
+                ShellResult statusResult = status(params);
+                if (statusResult.getExitCode() == 0) {
+                    return statusResult;
+                }
+                Thread.sleep(pollInterval);
+            }
+            return status(params);
+        } catch (Exception e) {
+            throw new StackException(e);
+        }
+    }
+
+    @Override
+    public ShellResult stop(Params params) {
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String cmd = MessageFormat.format(
+                "ps -ef | grep -v grep | grep {0} | grep worker | cut -d' ' 
-f2 | xargs kill -9",
+                seatunnelParams.serviceHome());
+        try {
+            return LinuxOSUtils.sudoExecCmd(cmd, seatunnelParams.user());
+        } catch (Exception e) {
+            throw new StackException(e);
+        }
+    }
+
+    @Override
+    public ShellResult status(Params params) {
+        SeaTunnelParams seatunnelParams = (SeaTunnelParams) params;
+        String cmd =
+                MessageFormat.format("ps -ef | grep -v grep | grep {0} | grep 
worker", seatunnelParams.serviceHome());
+        try {
+            List<String> builderParameters = Arrays.asList("sh", "-c", cmd);
+            ShellResult result = ShellExecutor.execCommand(builderParameters);
+            if (result.getExitCode() == 0) {
+                return ShellResult.success();
+            } else {
+                return new ShellResult(-1, "", "SeaTunnel worker is not 
running");
+            }
+        } catch (Exception e) {
+            throw new StackException(e);
+        }
+    }
+
+    @Override
+    public String getComponentName() {
+        return "seatunnel_worker";
+    }
+}
diff --git a/bigtop-manager-stack/pom.xml b/bigtop-manager-stack/pom.xml
index 9334c1b2..5a197826 100644
--- a/bigtop-manager-stack/pom.xml
+++ b/bigtop-manager-stack/pom.xml
@@ -36,6 +36,7 @@
         <module>bigtop-manager-stack-core</module>
         <module>bigtop-manager-stack-bigtop</module>
         <module>bigtop-manager-stack-infra</module>
+        <module>bigtop-manager-stack-extra</module>
     </modules>
 
     <properties>
diff --git a/pom.xml b/pom.xml
index 14ec2c46..f6875303 100644
--- a/pom.xml
+++ b/pom.xml
@@ -112,6 +112,12 @@
                 <version>${project.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.apache.bigtop</groupId>
+                <artifactId>bigtop-manager-stack-extra</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
             <dependency>
                 <groupId>org.apache.bigtop</groupId>
                 <artifactId>bigtop-manager-ui</artifactId>

Reply via email to