Apache SeaTunnel 集群部署超詳細教程
SeaTunnel Engine 的Master服務和Worker服務分離,每個服務單獨一個進程。
- Master節(jié)點只負責作業(yè)調度,RESTful API,任務提交等,Imap數(shù)據(jù)只存儲在Master節(jié)點中。
- Worker節(jié)點只負責任務的執(zhí)行,不參與選舉成為Master,也不存儲Imap數(shù)據(jù)。
在所有Master節(jié)點中,同一時間只有一個Master節(jié)點工作,其他Master節(jié)點處于standby狀態(tài)。
當Master節(jié)點宕機或心跳超時,會從其它節(jié)點中選舉出一個新的Master Active節(jié)點。
這是最推薦的一種使用方式,在該模式下Master的負載會很小,Master有更多的資源用來進行作業(yè)的調度,任務的容錯指標監(jiān)控以及提供Rest API服務等,會有更高的穩(wěn)定性。
同時Worker節(jié)點不存儲Imap的數(shù)據(jù),所有的Imap數(shù)據(jù)都存儲在Master節(jié)點中,即使Worker節(jié)點負載高或者掛掉,也不會導致Imap數(shù)據(jù)重新分布。
下載安裝包
在開始下載SeaTunnel之前,您需要確保您已經(jīng)安裝了SeaTunnel所需要的以下軟件:
安裝Java (Java 8 或 11, 其他高于Java 8的版本理論上也可以工作) 以及設置
JAVA_HOME。
進入SeaTunnel下載頁面(https://seatunnel.apache.org/download)下載最新版本的發(fā)布版安裝包`seatunnel- -bin.tar.gz`
或者您也可以通過終端下載
export version="2.3.8"
wget "https://archive.apache.org/dist/seatunnel/${version}/apache-seatunnel-${version}-bin.tar.gz"
tar -xzvf "apache-seatunnel-${version}-bin.tar.gz"配置 SEATUNNEL_HOME
您可以通過添加 /etc/profile.d/seatunnel.sh 文件來配置 SEATUNNEL_HOME 。
/etc/profile.d/seatunnel.sh 的內(nèi)容如下:
export SEATUNNEL_HOME=${seatunnel install path}
export PATH=$PATH:$SEATUNNEL_HOME/bin配置 Master 節(jié)點 JVM 選項
Master節(jié)點的JVM參數(shù)在$SEATUNNEL_HOME/config/jvm_master_options文件中配置。
# JVM Heap -Xms2g -Xmx2g # JVM Dump -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/seatunnel/dump/zeta-server # Metaspace -XX:MaxMetaspaceSize=2g # G1GC -XX:+UseG1GC
Worker節(jié)點的JVM參數(shù)在$SEATUNNEL_HOME/config/jvm_worker_options文件中配置。
# JVM Heap -Xms2g -Xmx2g # JVM Dump -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/seatunnel/dump/zeta-server # Metaspace -XX:MaxMetaspaceSize=2g # G1GC -XX:+UseG1GC
配置 SeaTunnel Engine
SeaTunnel Engine 提供許多功能,需要在 seatunnel.yaml中進行配置。
Imap中數(shù)據(jù)的備份數(shù)設置(該參數(shù)在Worker節(jié)點無效)
SeaTunnel Engine 基于 Hazelcast IMDG 實現(xiàn)集群管理。集群的狀態(tài)數(shù)據(jù)(作業(yè)運行狀態(tài)、資源狀態(tài))存儲在 Hazelcast IMap。
存儲在 Hazelcast IMap 中的數(shù)據(jù)將在集群的所有節(jié)點上分布和存儲。
Hazelcast 會分區(qū)存儲在 Imap 中的數(shù)據(jù)。每個分區(qū)可以指定備份數(shù)量。因此,SeaTunnel Engine 可以實現(xiàn)集群 HA,無需使用其他服務(例如 zookeeper)。
backup count 是定義同步備份數(shù)量的參數(shù)。例如,如果設置為 1,則分區(qū)的備份將放置在一個其他成員上。如果設置為 2,則將放置在兩個其他成員上。
我們建議 backup-count 的值為 min(1, max(5, N/2))。N 是集群節(jié)點的數(shù)量。
seatunnel:
engine:
backup-count: 1
# 其他配置由于在分離集群模式下,Worker節(jié)點不存儲Imap數(shù)據(jù),因此Worker節(jié)點的
backup-count配置無效。
如果Master和Worker進程在同一個機器上啟動,Master和Worker會共用seatunnel.yaml配置文件,此時Worker節(jié)點服務會忽略backup-count配置。
Slot配置(該參數(shù)在Master節(jié)點無效)
Slot數(shù)量決定了集群節(jié)點可以并行運行的任務組數(shù)量。一個任務需要的Slot的個數(shù)公式為 N = 2 + P(任務配置的并行度)。
默認情況下SeaTunnel Engine的slot個數(shù)為動態(tài),即不限制個數(shù)。我們建議slot的個數(shù)設置為節(jié)點CPU核心數(shù)的2倍。
動態(tài)slot個數(shù)(默認)配置如下:
seatunnel:
engine:
slot-service:
dynamic-slot: true
# 其他配置靜態(tài)slot個數(shù)配置如下:
seatunnel:
engine:
slot-service:
dynamic-slot: false
slot-num: 20由于在分離集群模式下,Master節(jié)點不運行任務,所以Master服務不會啟動Slot服務,因此Master節(jié)點的slot-service配置無效。
如果Master和Worker進程在同一個機器上啟動,Master和Worker會共用seatunnel.yaml配置文件,此時Master節(jié)點服務會忽略slot-service配置。
檢查點管理器(該參數(shù)在Worker節(jié)點無效)
與 Flink 一樣,SeaTunnel Engine 支持 Chandy–Lamport算法。因此,可以實現(xiàn)無數(shù)據(jù)丟失和重復的數(shù)據(jù)同步。
interval
兩個檢查點之間的間隔,單位是毫秒。如果在作業(yè)配置文件的 env 中配置了 checkpoint.interval 參數(shù),將以作業(yè)配置文件中設置的為準。
timeout
檢查點的超時時間。如果在超時時間內(nèi)無法完成檢查點,則會觸發(fā)檢查點失敗,作業(yè)失敗。如果在作業(yè)的配置文件的env中配置了checkpoint.timeout參數(shù),將以作業(yè)配置文件中設置的為準。
示例
seatunnel:
engine:
backup-count: 1
print-execution-info-interval: 10
slot-service:
dynamic-slot: true
checkpoint:
interval: 300000
timeout: 10000checkpoint storage
檢查點是一種容錯恢復機制。這種機制確保程序在運行時,即使突然遇到異常,也能自行恢復。
檢查點定時觸發(fā),每次檢查點進行時每個Task都會被要求將自身的狀態(tài)信息(比如讀取kafka時讀取到了哪個offset)上報給檢查點線程,由該線程寫入一個分布式存儲(或共享存儲)。
當任務失敗然后自動容錯恢復時,或者通過seatunnel.sh -r 指令恢復之前被暫停的任務時,會從檢查點存儲中加載對應作業(yè)的狀態(tài)信息,并基于這些狀態(tài)信息進行作業(yè)的恢復。
如果集群的節(jié)點大于1,檢查點存儲必須是一個分布式存儲,或者共享存儲,這樣才能保證任意節(jié)點掛掉后依然可以在另一個節(jié)點加載到存儲中的任務狀態(tài)信息。
檢查點配置只有Master服務才會讀取,Worker服務不會讀取檢查點配置。如果Master和Worker進程在同一個機器上啟動,Master和Worker會共用
seatunnel.yaml配置文件,此時Worker節(jié)點服務會忽略checkpoint配置。
歷史作業(yè)過期配置
每個完成的作業(yè)的信息,如狀態(tài)、計數(shù)器和錯誤日志,都存儲在 IMap 對象中。
隨著運行作業(yè)數(shù)量的增加,內(nèi)存會增加,最終內(nèi)存將溢出。因此,您可以調整 history-job-expire-minutes 參數(shù)來解決這個問題。
此參數(shù)的時間單位是分鐘。默認值是 1440 分鐘,即一天。
示例
seatunnel:
engine:
history-job-expire-minutes: 1440類加載器緩存模式
此配置主要解決不斷創(chuàng)建和嘗試銷毀類加載器所導致的資源泄漏問題。如果您遇到與metaspace空間溢出相關的異常,您可以嘗試啟用此配置。
為了減少創(chuàng)建類加載器的頻率,在啟用此配置后,SeaTunnel 在作業(yè)完成時不會嘗試釋放相應的類加載器,以便它可以被后續(xù)作業(yè)使用,也就是說,當運行作業(yè)中使用的 Source/Sink 連接器類型不是太多時,它更有效。默認值是 false。
示例
seatunnel:
engine:
classloader-cache-mode: trueIMap持久化配置(該參數(shù)在Worker節(jié)點無效)
由于在分離集群模式下,只有Master節(jié)點存儲Imap數(shù)據(jù),Worker節(jié)點不存儲Imap數(shù)據(jù),所以Worker服務不會讀取該參數(shù)項。
在SeaTunnel中,我們使用IMap(一種分布式的Map,可以實現(xiàn)數(shù)據(jù)跨節(jié)點跨進程的寫入的讀取 有關詳細信息,請參閱 Hazelcast Map) 來存儲每個任務及其task的狀態(tài),以便在任務所在節(jié)點宕機后,可以在其他節(jié)點上獲取到任務之前的狀態(tài)信息,從而恢復任務實現(xiàn)任務的容錯。
默認情況下Imap的信息只是存儲在內(nèi)存中,我們可以設置Imap數(shù)據(jù)的復本數(shù),具體可參考(Imap中數(shù)據(jù)的備份數(shù)設置),如果復本數(shù)是2,代表每個數(shù)據(jù)會同時存儲在2個不同的節(jié)點中。
一旦節(jié)點宕機,Imap中的數(shù)據(jù)會重新在其它節(jié)點上自動補充到設置的復本數(shù)。但是當所有節(jié)點都被停止后,Imap中的數(shù)據(jù)會丟失。當集群節(jié)點再次啟動后,所有之前正在運行的任務都會被標記為失敗,需要用戶手工通過seatunnel.sh -r指令恢復運行。
為了解決這個問題,我們可以將Imap中的數(shù)據(jù)持久化到外部存儲中,如HDFS、OSS等。這樣即使所有節(jié)點都被停止,Imap中的數(shù)據(jù)也不會丟失,當集群節(jié)點再次啟動后,所有之前正在運行的任務都會被自動恢復。
下面介紹如何使用 MapStore 持久化配置。
type
imap 持久化的類型,目前僅支持 hdfs。
namespace
它用于區(qū)分不同業(yè)務的數(shù)據(jù)存儲位置,如 OSS 存儲桶名稱。
clusterName
此參數(shù)主要用于集群隔離, 我們可以使用它來區(qū)分不同的集群,如 cluster1、cluster2,這也用于區(qū)分不同的業(yè)務。
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
storage.type: hdfs
fs.defaultFS: hdfs://localhost:9000如果沒有 HDFS,并且您的集群只有一個節(jié)點,您可以像這樣配置使用本地文件:
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
storage.type: hdfs
fs.defaultFS: file:///如果您使用 OSS,可以像這樣配置:
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
storage.type: oss
block.size: block size(bytes)
oss.bucket: oss://bucket name/
fs.oss.accessKeyId: OSS access key id
fs.oss.accessKeySecret: OSS access key secret
fs.oss.endpoint: OSS endpoint注意:使用OSS 時,確保 lib目錄下有這幾個jar.
aliyun-sdk-oss-3.13.2.jar hadoop-aliyun-3.3.6.jar jdom2-2.0.6.jar netty-buffer-4.1.89.Final.jar netty-common-4.1.89.Final.jar seatunnel-hadoop3-3.1.4-uber.jar
作業(yè)調度策略
當資源不足時,作業(yè)調度策略可以配置為以下兩種模式:
WAIT:等待資源可用。
REJECT:拒絕作業(yè),默認值。
示例
seatunnel:
engine:
job-schedule-strategy: WAIT當dynamic-slot: ture時,job-schedule-strategy: WAIT 配置會失效,將被強制修改為job-schedule-strategy: REJECT,因為動態(tài)Slot時該參數(shù)沒有意義,可以直接提交。
配置網(wǎng)絡服務
所有 SeaTunnel Engine 網(wǎng)絡相關的配置都在 hazelcast-Master.yaml和hazelcast-worker.yaml 文件中.
集群名稱
SeaTunnel Engine 節(jié)點使用 cluster-name 來確定另一個節(jié)點是否與自己在同一集群中。如果兩個節(jié)點之間的集群名稱不同,SeaTunnel 引擎將拒絕服務請求。
網(wǎng)絡
基于 Hazelcast , 一個 SeaTunnel Engine 集群是由運行 SeaTunnel Engine 服務器的集群成員組成的網(wǎng)絡。集群成員自動加入一起形成集群。這種自動加入是通過集群成員使用的各種發(fā)現(xiàn)機制來相互發(fā)現(xiàn)的。
請注意,集群形成后,集群成員之間的通信始終通過 TCP/IP 進行,無論使用的發(fā)現(xiàn)機制如何。
SeaTunnel Engine 使用以下發(fā)現(xiàn)機制。
TCP
您可以將 SeaTunnel Engine 配置為完整的 TCP/IP 集群。有關配置詳細信息,請參閱 Discovering Members by TCP section。
在分離集群模式下,Master和Worker服務使用不同的端口。
Master節(jié)點網(wǎng)絡配置 hazelcast-Master.yaml
hazelcast:
cluster-name: seatunnel
network:
rest-api:
enabled: true
endpoint-groups:
CLUSTER_WRITE:
enabled: true
DATA:
enabled: true
join:
tcp-ip:
enabled: true
member-list:
- master-node-1:5801
- master-node-2:5801
- worker-node-1:5802
- worker-node-2:5802
port:
auto-increment: false
port: 5801
properties:
hazelcast.heartbeat.failuredetector.type: phi-accrual
hazelcast.heartbeat.interval.seconds: 2
hazelcast.max.no.heartbeat.seconds: 180
hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10
hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200
hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100Worker節(jié)點網(wǎng)絡配置 hazelcast-worker.yaml
hazelcast:
cluster-name: seatunnel
network:
join:
tcp-ip:
enabled: true
member-list:
- master-node-1:5801
- master-node-2:5801
- worker-node-1:5802
- worker-node-2:5802
port:
auto-increment: false
port: 5802
properties:
hazelcast.heartbeat.failuredetector.type: phi-accrual
hazelcast.heartbeat.interval.seconds: 2
hazelcast.max.no.heartbeat.seconds: 180
hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10
hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200
hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100TCP 是我們建議在獨立 SeaTunnel Engine 集群中使用的方式。
啟動 SeaTunnel Engine Master 節(jié)點
可以通過守護進程使用 -d 參數(shù)啟動。
mkdir -p $SEATUNNEL_HOME/logs ./bin/seatunnel-cluster.sh -d -r master
日志將寫入 $SEATUNNEL_HOME/logs/seatunnel-engine-Master.log
啟動 SeaTunnel Engine Worker 節(jié)點
可以通過守護進程使用 -d 參數(shù)啟動。
mkdir -p $SEATUNNEL_HOME/logs ./bin/seatunnel-cluster.sh -d -r worker
日志將寫入 $SEATUNNEL_HOME/logs/seatunnel-engine-worker.log
安裝 SeaTunnel Engine 客戶端
您可以通過添加 /etc/profile.d/seatunnel.sh 文件來配置 SEATUNNEL_HOME 。/etc/profile.d/seatunnel.sh 的內(nèi)容如下:
export SEATUNNEL_HOME=${seatunnel install path}
export PATH=$PATH:$SEATUNNEL_HOME/bin提交作業(yè)和管理作業(yè) 使用 SeaTunnel Engine 客戶端提交作業(yè)
安裝 SeaTunnel Engine 客戶端
設置和服務器一樣的SEATUNNEL_HOME
您可以通過添加 /etc/profile.d/seatunnel.sh 文件來配置 SEATUNNEL_HOME 。
/etc/profile.d/seatunnel.sh 的內(nèi)容如下:
export SEATUNNEL_HOME=${seatunnel install path}
export PATH=$PATH:$SEATUNNEL_HOME/bin配置 SeaTunnel Engine 客戶端
所有 SeaTunnel Engine 客戶端的配置都在 hazelcast-client.yaml 里。
cluster-name
客戶端必須與 SeaTunnel Engine 具有相同的 cluster-name。
否則,SeaTunnel Engine 將拒絕客戶端的請求。
network
需要將所有 SeaTunnel Engine Master節(jié)點的地址添加到這里。
hazelcast-client:
cluster-name: seatunnel
properties:
hazelcast.logging.type: log4j2
network:
cluster-members:
- master-node-1:5801
- master-node-2:5801提交作業(yè)和管理作業(yè)
現(xiàn)在集群部署完成了,您可以通過以下教程完成作業(yè)的提交和管理:
bin/seatunnel.sh --config $SEATUNNEL_HOME/config/v2.batch.config.template
--async參數(shù)可以讓作業(yè)在后臺運行,當作業(yè)提交后,客戶端會退出。
./bin/seatunnel.sh --config $SEATUNNEL_HOME/config/v2.batch.config.template --async
-n或--name參數(shù)可以指定作業(yè)的名稱
./bin/seatunnel.sh --config $SEATUNNEL_HOME/config/v2.batch.config.template --async -n myjob
查看作業(yè)列表
./bin/seatunnel.sh -l
該命令會輸出所有當前集群中的作業(yè)列表(包含運行完成的歷史作業(yè)和正在運行的作業(yè))
查看作業(yè)狀態(tài)
./bin/seatunnel.sh -j <jobId>
該命令會輸出指定作業(yè)的狀態(tài)信息
獲取正在運行的作業(yè)監(jiān)控信息
./bin/seatunnel.sh --get_running_job_metrics
該命令會輸出正在運行的作業(yè)的監(jiān)控信息
獲取指定作業(yè)監(jiān)控信息
--metrics 參數(shù)可以獲取指定作業(yè)的監(jiān)控信息
./bin/seatunnel.sh --metrics <jobId>
暫停作業(yè)
./bin/seatunnel.sh -s <jobId>
該命令會暫停指定作業(yè),注意,只有開啟了checkpoint的作業(yè)才支持暫停作業(yè)(實時同步作業(yè)默認開啟checkpoint,批處理作業(yè)默認不開啟checkpoint需要通過在 env 中配置checkpoint.interval來開啟checkpoint)。
暫停作業(yè)是以split為最小單位的,即暫停作業(yè)后,會等待當前正在運行的split運行完成后再暫停。
任務恢復后,會從暫停的split繼續(xù)運行。
恢復作業(yè)
./bin/seatunnel.sh -r <jobId> -c $SEATUNNEL_HOME/config/v2.batch.config.template
該命令會恢復指定作業(yè),注意,只有開啟了checkpoint的作業(yè)才支持恢復作業(yè)(實時同步作業(yè)默認開啟checkpoint,批處理作業(yè)默認不開啟checkpoint需要通過在 env 中配置checkpoint.interval來開啟checkpoint)。
恢復作業(yè)需要指定jobId和作業(yè)的配置文件。
運行失敗的作業(yè)和通過seatunnel.sh -s暫停的作業(yè)都可以通過該命令恢復。
取消作業(yè)
./bin/seatunnel.sh -can <jobId1> [<jobId2> <jobId3> ...]
該命令會取消指定作業(yè),取消作業(yè)后,作業(yè)會被停止,作業(yè)的狀態(tài)會變?yōu)镃ANCELED。
支持批量取消作業(yè),可以一次取消多個作業(yè)。
被cancel的作業(yè)的所有斷點信息都將被刪除,無法通過seatunnel.sh -r恢復。
使用 REST API 提交作業(yè)
SeaTunnel Engine 提供了 REST API 用于提交作業(yè)。
v2版本的API使用jetty支持,與v1版本的接口規(guī)范相同 ,可以通過修改seatunnel.yaml中的配置項來指定端口和context-path,同時可以配置 enable-dynamic-port 開啟動態(tài)端口(默認從 port 開始累加),默認為關閉, 如果enable-dynamic-port為true,將使用port和port+port-range范圍內(nèi)未使用的端口,默認范圍是100。
seatunnel:
engine:
http:
enable-http: true
port: 8080
enable-dynamic-port: false
port-range: 100同時也可以配置context-path,配置如下:
seatunnel:
engine:
http:
enable-http: true
port: 8080
context-path: /seatunnel其他API我已上傳Github請查看自取
【 Github地址:https://github.com/Mrkuhuo/data-warehouse-learning 】
【 Gitee 地址:https://gitee.com/wzylzjtn/data-warehouse-learning 】

到此這篇關于Apache SeaTunnel 集群部署詳細教程的文章就介紹到這了,更多相關Apache SeaTunnel 集群部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Ubuntu Server 11.10安裝配置lamp(Apache+MySQL+PHP)
這篇文章主要介紹了Ubuntu Server 11.10安裝配置lamp(Apache+MySQL+PHP),需要的朋友可以參考下2016-10-10
Linux 解決Deepin無法在root用戶啟動Google Chrome瀏覽器的問題
這篇文章主要介紹了Linux 解決Deepin無法在root用戶啟動Google Chrome瀏覽器的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07

