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>