Flink學習(二):集羣部署

 

Flink可以有多種集羣模式,例如獨立集羣、on YARN、Docker、AWS等。

對於獨立集羣模式,需要有至少兩臺獨立的機器(物理機、虛擬機或者Docker/K8s等容器),其中一臺作爲Master,剩下的作爲Slave,或者稱爲Worker。

首先需要修改配置文件 conf/flink-conf.yaml,將jobmanager.rpc.address修改爲Master機器的地址,然後修改conf/slaves文件,將其他機器的地址寫進去,我這邊想嘗試修改成

localhost:8082
localhost:8083

但是運行start-cluster.sh腳本時提示找不到Slave節點,沒辦法嘗試單機集羣,不過可以多次運行start-cluster.sh腳本,啓動多個TaskManager。

這裏有三個Task Slot,代表集羣具有的併發能力。也可以單獨運行jobmanager.sh或taskmanager.sh,單獨添加JobManager或TaskManager:

  • bin/jobmanager.sh ((start|start-foreground) [host] [webui-port])|stop|stop-all
  • bin/taskmanager.sh start|start-foreground|stop|stop-all

各節點配置時,需保證Master節點能夠免密登錄到其他Slave機器。flink-conf.yaml還提供了一些配置項,例如:

  • jobmanager.heap.size:每個jobmanager的可用內存量
  • taskmanager.heap.size:每個Taskmanager的可用內存量
  • taskmanager.numberOfTaskSlots:每個機器可用的CPU數量
  • parallelism.default:集羣總的CPU數,即實際可用的併發數
  • io.tmp.dirs:臨時目錄

 

對於基於YARN的集羣模式,需要下載嵌入式Hadoop:

然後放到Flink安裝目錄的lib文件夾下。然後安裝並部署Hadoop集羣,過程略。

使用Flink on YARN模式,有兩種方案,第一種是啓動一個長期運行的Flink集羣,Flink任務都提交到這個集羣中,需要使用bin/yarn-session.sh腳本,該腳本的選項如下:

  • -D arg:動態傳遞配置
  • -d,--detached:分離模式,在該模式下,客戶端只負責提交任務,然後退出,需要使用YARN來管理Flink集羣的生命週期
  • -jm,--jobManagerMemory:配置每個JobManager的內存
  • -nm,--name:給YARN上的程序設置一個名字
  • -q,--query:顯示YARN中可用的CPU、內存等資源
  • -qu,--queue:指定YARN隊列
  • -s,--slots:配置每個TaskManager有多少個任務槽
  • -tm,--taskManagerMemory:配置每個TaskManager的內存
  • -z,--zookeeperNamespace:配置高可用模式下ZK的命名空間
  • -id,--applicationId:指定YARN集羣的任務ID,附着到一個YARN會話中,使用YARN ResourceManager確定Job Manager的RPC端口
  • -n:TaskManager數量

例如: bin/yarn-session -jm 1024m -tm 4096m 

添加一個YARN會話,需要使用-id選項

執行Flink任務,類似於本地模式,也是使用 bin/flink run 待運行的Jar包路徑

在啓動on YARN模式時,也是基於 conf/flink-conf.yaml配置文件的,但是會覆蓋jobmanager.rpc.address、io.tmp.dirs等配置,也可以用-D選項傳遞自定義配置。並且在啓動yarn-session.sh之前,必須配置YARN_CONF_DIRHADOOP_CONF_DIR爲環境變量。

第二種啓動模式是爲每一個Flink任務創建一個新的YARN會話,各任務間互不影響,任務執行完畢後自動結束對應的YARN會話。

使用方法是提交任務時帶上-m參數:

./bin/flink run -m yarn-cluster ./examples/batch/WordCount.jar

 

-m參數指定了需要連接的JobManager地址,這裏的yarn-cluster代表了YARN集羣的地址,即一個host:port對。

Flink客戶端到環境變量指定的Hadoop或YARN配置文件,去找到YARN資源管理器和HDFS地址並連接。在新任務提交時,如果YARN資源可用,就會上傳Flink配置和JAR包到HDFS。YARN的AppilicationManager會應Flink客戶端請求啓動,從而得到JobManager地址,併爲TaskManager生成Flink配置,是之和JobManager連接。然後AppilicationManager會爲TaskManager分配容器,並把新的配置文件和JAR包從HDFS下載給TaskManager。

還有就是如果需要用到文件作爲輸入,類似於Hadoop的WordCount示例,需要提前上傳到HDFS中,然後通過--input選項,提交hdfs協議的地址。

 

高可用模式:

一般情況下,每個集羣都是一個JobManager,有可能會有單點風險,Flink也提供了高可用(HA)模式。

Standalone模式下,高可用需要依賴Zookeeper(ZK)和HDFS,需要預先部署,過程略。

假設現在集羣裏有3個JobManager,地址分別是 jm00,jm01,jm02

TaskManager、Zokkeeper、Hadoop節點依此類推,分別用tm、zk、hadoop代替

對flink-conf.yaml修改如下:

high-availability: zookeeper
high-availability.zookeeper.quorum: zk00:2181,zk01:2181,zk02:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /default_ns
high-availability.storageDir: hdfs://hadoop00:9000/recovery

在conf/masters文件中,添加所有主節點的地址:

jm00:8081
jm01:8081
jm02:8081

同樣,slaves文件也要添加所有從節點的地址,將配置在其他Flink節點全都複製一份

然後按照Hadoop -> Zookeeper -> Flink的順序啓動即可。

 

如果是on YARN集羣模式,可以藉助YARN的任務恢復機制來實現高可用,同樣需要Zookeeper和Hadoop。

首先是需要設置Hadoop的YARN提交任務的最大嘗試次數,例如3次

然後修改Flink配置,例如:

high-availability: zookeeper
high-availability.zookeeper.quorum: zk00:2181,zk01:2181,zk02:2181
high-availability.zookeeper.path.root: /flink
high-availability.storageDir: hdfs://hadoop00:9000/recovery
yarn.application-attempts: 10

然後啓動Hadoop、Zookeeper、Flink集羣即可。

發佈了84 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章