暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术教程 | 部署 Apache SeaTunnel 分布式集群

SeaTunnel 2023-09-08
2512

新手用户建议阅读这篇:深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台

一、部署SeaTunnel引擎

SeaTunnel Engine 是 SeaTunnel 的默认引擎。SeaTunnel的安装包中已经包含了SeaTunnel Engine的所有内容。

二、配置环境变量

在/etc/profile.d/seatunnel.sh中配置环境变量

    export SEATUNNEL_HOME=${seatunnel install path}
    export PATH=$PATH:$SEATUNNEL_HOME/bin

    三、配置 SeaTunnel Engine JVM

    SeaTunnel Engine 支持两种设置 jvm 选项的方式。

    1.将 JVM 选项添加到$SEATUNNEL_HOME/bin/seatunnel-cluster.sh第一行

      JAVA_OPTS="-Xms2G -Xmx2G"

      2.启动 SeaTunnel 引擎时添加 JVM 选项。例如seatunnel-cluster.sh -DJvmOption=“-Xms2G -Xmx2G”

      四、配置SeaTunnel

      SeaTunnel Engine提供了很多功能,需要在seatunnel.yaml中进行配置。

      1.备份

      SeaTunnel Engine 基于Hazelcast IMDG实现集群管理。集群的状态数据(作业运行状态,资源状态)存储在Hazelcast IMap中。

      Hazelcast IMap 中保存的数据将分布存储在集群的所有节点中。Hazelcast 会对存储在 Imap 中的数据进行分区。每个分区可以指定备份的数量。因此,SeaTunnel Engine可以在不使用其他服务(例如zookeeper)的情况下实现集群HA。

      用于backup count定义同步备份的数量。例如,如果设置为 1,分区的备份将放在另外一个成员上。如果是2,就会放在另外两个成员身上。

      我们建议的backup-count值为min(1, max(5, N/2))。N是集群节点的编号。

        seatunnel:
        engine:
        backup-count: 1
        # other config

        2.Slots

        Slots的数量决定了集群节点可以并行运行的TaskGroups的数量。SeaTunnel Engine是一个数据同步引擎,大部分作业都是IO密集型的。

        建议使用动态插槽。

          seatunnel:
          engine:
          slot-service:
          dynamic-slot: true
                  # other config

          3.检查点

          与 Flink 一样,SeaTunnel Engine 支持 Chandy–Lamport 算法。因此,SeaTunnel Engine可以实现数据同步,不丢失数据,不重复数据。

          间隔:

          • 两个检查点之间的间隔,单位是毫秒。如果在作业配置文件checkpoint.interval中配置了该参数env,则此处设置的值将被覆盖。暂停:

          • 检查点超时。如果在超时期限内无法完成检查点,则会触发检查点故障。最大并发:

          • 最多可以同时执行多少个检查点。可容忍的失败

          检查点失败后的最大重试次数。

            seatunnel:
            engine:
            backup-count: 1
            print-execution-info-interval: 10
            slot-service:
            dynamic-slot: true
            checkpoint:
            interval: 300000
            timeout: 10000
            max-concurrent: 1
            tolerable-failure: 2



            五、配置SeaTunnel引擎

            文件中的所有 SeaTunnel 引擎服务器配置hazelcast.yaml。

            SeaTunnel Engine 节点使用集群名称来判断对方是否与自己是一个集群。如果两个节点之间的集群名称不同,SeaTunnel Engine 将拒绝服务请求。

            基于Hazelcast,SeaTunnel Engine 集群是运行 SeaTunnel Engine Server 的集群成员网络。集群成员自动连接在一起形成一个集群。这种自动加入是通过集群成员用来相互查找的各种发现机制进行的。

            请注意,集群形成后,无论使用何种发现机制,集群成员之间的通信始终通过 TCP/IP。

            SeaTunnel Engine 使用以下发现机制。可以将 SeaTunnel Engine 配置为完整的 TCP/IP 集群。

              hazelcast:
              cluster-name: seatunnel
              network:
              join:
              tcp-ip:
              enabled: true
              member-list:
              - hostname1
              port:
              auto-increment: false
              port: 5801
              properties:
              hazelcast.logging.type: log4j2
              2

              TCP 是我们在独立 SeaTunnel Engine 集群中的建议方式。

              类型

              imap 持久化的类型,目前只支持hdfs.

              命名空间

              用于区分不同业务的数据存储位置,如OSS bucket名称。

              集群名称

              这个参数主要是用来做集群隔离的,我们可以用这个来区分不同的集群,比如cluster1,cluster2,这个也用来区分不同的业务

              fs.defaultFS

              我们使用hdfs api读写文件,所以使用这个存储需要提供hdfs配置

              如果你使用 HDFS,你可以这样配置:

                map:
                engine*:
                map-store:
                enabled: true
                initial-mode: EAGER
                factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory
                properties:
                type: hdfs
                namespace: tmp/seatunnel/imap
                clusterName: seatunnel-cluster
                           fs.defaultFS: hdfs://localhost:9000

                如果没有 HDFS 并且您的集群只有一个节点,您可以像这样配置使用本地文件:

                  map:
                  engine*:
                  map-store:
                  enabled: true
                  initial-mode: EAGER
                  factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory
                  properties:
                  type: hdfs
                  namespace: tmp/seatunnel/imap
                  clusterName: seatunnel-cluster
                             fs.defaultFS: file:///

                  六、配置 SeaTunnel 引擎服务器

                  cluster-name客户端必须与 SeaTunnel Engine相同。否则,SeaTunnel Engine 将拒绝客户端请求。

                  集群成员

                  所有SeaTunnel Engine Server Node地址都需要添加到这里。

                    hazelcast-client:
                    cluster-name: seatunnel
                    properties:
                    hazelcast.logging.type: log4j2
                    network:
                    cluster-members:
                          - hostname1:5801

                    启动SeaTunnel Engine Server

                      mkdir -p $SEATUNNEL_HOME/logs
                      nohup bin/seatunnel-cluster.sh 2>&1 &

                      日志将写入$SEATUNNEL_HOME/logs/seatunnel-engine-server.log

                      只需要将$SEATUNNEL_HOMESeaTunnel Engine节点上的目录复制到Client节点,并配置SEATUNNEL_HOME类似的SeaTunnel Engine Server节点即可。

                      七、部署SeaTunnel分布式集群

                      这是在生产环境中最推荐使用 SeaTunnel Engine 的方式。该模式支持SeaTunnel Engine的全部功能,集群模式的性能和稳定性会更好。

                      集群模式下,需要先部署SeaTunnel Engine集群,客户端将作业提交给SeaTunnel Engine集群运行。

                      提交命令

                        SEATUNNEL_HOME/config/v2.batch.config.template

                        八、检查点存储

                        Checkpoint是一种容错恢复机制。这种机制保证了程序运行时,即使突然遇到异常,也能自行恢复。

                        检查点 Checkpoint Storage是一种存储检查点数据的存储机制。

                        SeaTunnel Engine 支持以下检查点存储类型:

                        HDFS(OSS、S3、HDFS、本地文件) LocalFile(本机),(已弃用:改用 Hdfs(LocalFile)。我们使用微内核设计模式将检查点存储模块与引擎分离。这允许用户实现自己的检查点存储模块。

                        checkpoint-storage-api是checkpoint存储模块API,定义了checkpoint存储模块的接口。

                        如果要实现自己的checkpoint存储模块,需要实现CheckpointStorage并提供相应的CheckpointStorageFactory实现。

                        检查点存储 模块的配置seatunnel-server在seatunnel.yaml文件中。

                          seatunnel:
                          engine:
                          checkpoint:
                          storage:
                          type: hdfs #plugin name of checkpoint storage, we support hdfs(S3, local, hdfs), localfile (native local file) is the default, but this plugin is de
                          # plugin configuration
                          plugin-config:
                          namespace: #checkpoint storage parent path, the default value is seatunnel/checkpoint/
                          K1: V1 # plugin other configuration
                          K2: V2 # plugin other configuration

                          注意:命名空间必须以“/”结尾。

                          如果你使用 HDFS,你可以这样配置:

                            seatunnel:
                            engine:
                            checkpoint:
                            storage:
                            type: hdfs
                            max-retained: 3
                            plugin-config:
                            storage.type: hdfs
                            fs.defaultFS: hdfs://localhost:9000
                            // if you used kerberos, you can config like this:
                            kerberosPrincipal: your-kerberos-principal
                            kerberosKeytab: your-kerberos-keytab


                              seatunnel:
                              engine:
                              checkpoint:
                              interval: 6000
                              timeout: 7000
                              max-concurrent: 5
                              tolerable-failure: 2
                              storage:
                              type: hdfs
                              max-retained: 3
                              plugin-config:
                              storage.type: hdfs
                              fs.defaultFS: file:/// # Ensure that the directory has written permission


                              九、TCP

                              TCP网络 如果多播不是您环境的首选发现方式,那么您可以将 SeaTunnel Engine 配置为完整的 TCP/IP 集群。当您将 SeaTunnel Engine 配置为通过 TCP/IP 发现成员时,您必须将所有或部分成员的主机名和/或 IP 地址列为集群成员。您不必列出所有这些集群成员,但当新成员加入时,至少有一个列出的成员必须在集群中处于活动状态。

                              要将 Hazelcast 配置为完整的 TCP/IP 集群,请设置以下配置元素。有关 TCP/IP 发现配置元素的完整描述,请参阅 tcp-ip 元素部分。

                              • 将 tcp-ip 元素的 enabled 属性设置为 true。
                              • 在 tcp-ip 元素中提供您的成员元素。以下是示例声明性配置。
                                hazelcast:
                                network:
                                join:
                                tcp-ip:
                                enabled: true
                                member-list:
                                - machine1
                                - machine2
                                - machine3:5799
                                - 192.168.1.0-7
                                - 192.168.1.21


                                如上所示,您可以为成员元素提供 IP 地址或主机名。您还可以提供 IP 地址范围,例如192.168.1.0-7.

                                除了如上所示逐行提供成员,您还可以选择使用成员元素并编写以逗号分隔的 IP 地址,如下所示。

                                192.168.1.0-7,192.168.1.21

                                如果您不为成员提供端口,Hazelcast 会自动尝试端口5701,5702依此类推。

                                Apache SeaTunnel





                                Apache SeaTunnel 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台

                                仓库地址: 
                                https://github.com/apache/seatunnel

                                网址:
                                https://seatunnel.apache.org/


                                Apache SeaTunnel 下载地址:
                                https://seatunnel.apache.org/download
                                 
                                衷心欢迎更多人加入!

                                我们相信,在「Community Over Code」(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!


                                我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!

                                提交问题和建议:
                                https://github.com/apache/seatunnel/issues

                                贡献代码:
                                https://github.com/apache/seatunnel/pulls

                                订阅社区开发邮件列表 : 
                                dev-subscribe@seatunnel.apache.org

                                开发邮件列表:
                                dev@seatunnel.apache.org

                                加入 Slack:
                                https://join.slack.com/t/apacheseatunnel/shared_invite/zt-1kcxzyrxz-lKcF3BAyzHEmpcc4OSaCjQ

                                关注 Twitter: 
                                https://twitter.com/ASFSeaTunnel

                                精彩推荐




                                Apache SeaTunnel Connector 使用文档和使用案例有奖征稿来了!一起玩开源




                                曝光!Apache SeaTunnel Catalog 功能设计为何能大大简化用户启用步骤?




                                SeaTunnel 发布成为 Apache 顶级项目后首个版本 2.3.2,进一步提高 Zeta 引擎稳定性和易用性



                                点击在看点赞转发⭐️!

                                文章转载自SeaTunnel,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论