flink部署【高可用HA部署】

多機部署Flink standalone 集羣

部署前要注意的要點

  • 每臺機器上配置好java以及JAVA_HOME環境變量
  • 最好挑選一臺機器,和其他機器ssh 打通
  • 每臺機器上部署的Flink binary的目錄要保證是同一個目錄
  • 如果需要用hdfs,需要配置HADOOP_CONF_DIR環境變量配置上

配置

  • JobManager機器:master
  • TaskManager機器:node1,node2,node3

修改Flink binary目錄的conf子目錄中的mastersslaves兩個文件:

$cat conf/masters
master:8081
$cat conf/slaves
node1
node2
node3

修改conf/flink-conf.yaml配置

jobmanager.rpc.address: master

然後把修改後的這三個文件同步到其他機器的相同conf目錄下.

然後啓動flink集羣:

./bin/start-cluster.sh

提交WordCount作業

./bin/flink run examples/streaming/WordCount.jar

上傳WordCountinput文件:

hdfs dfs -copyFromLocal story /test_dir/input_dir/story

提交讀寫hdfs的WordCount作業:

./bin/flink run examples/streaming/WordCount.jar --input hdfs:///test_dir/input_dir/story --output
hdfs:///test_dir/output_dir/output

增加WordCount作業的併發度(注意輸出文件重名會提交失敗):

./bin/flink run examples/streaming/WordCount.jar --input hdfs:///test_dir/input_dir/story --output
hdfs:///test_dir/output_dir/output --parallelism 20

standalone 模式的HighAvailability(HA)部署和配置

JobManager是整個系統中最可能導致系統不可用的角色。一個TaskManager掛了,如果資源足夠(空閒TaskSlot足夠)的話,則只需要把相關task調度到其他空閒TaskSlot上,然後job從checkpoint中恢復即可。而如果當前集羣中只配置了一個JobManager,則一旦JobManager掛了,就必須等待這個JobManager重新恢復,如果恢復時間過長,就可能導致整個job失敗。
官方HA部署說明

所需環境

  • flink-1.10
  • zookeeper
  • hadoop

flink內部也提供了zookeeper插件,通過修改/conf/zoo.cfg文件即可,啓動命令在/bin/start-zookeeper-quorum.sh

配置

  1. conf/flink-conf.yaml
# 高可用相關重要配置
# 配置high-availability mode
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /cluster_one # important: customize per cluster /可以不配,自動生成
high-availability.storageDir: hdfs:///flink/recovery
state.checkpoints.dir:  hdfs:///flink/checkpoints
state.savepoints.dir: hdfs:///flink/savepoints
  1. conf/mastersslaves
master1:8081
master2:8081
slave001
slave002
slave003
  1. conf/zoo.cfg
server.1=slave001:2888:3888
server.2=slave002:2888:3888
server.3=slave003:2888:3888

修改完成後,再把這幾個文件同步到不同機器到相同conf目錄下。

  1. 啓動zookeeper(如果已經有zookeeper集羣可以不使用flink自帶的)
$ bin/start-zookeeper-quorum.sh
  1. 啓動HA-cluster
$ bin/start-cluster.sh

分別打開:
http://master1:8081
http://master2:8081

可以看到兩個頁面最後都轉到了同一個地址上,這個地址就是當前主JobManager所在機器,另一個就是standby JobManager。
當我們知道主JobManager後,我們可以把主JobManager進程kill掉,比如當前主JobManager在matser1這個機器上,就把這個進程殺掉.

  1. 關閉zookeeper和flink
$ bin/stop-cluster.sh
$ bin/stop-zookeeper-quorum.sh

注意事項

flink-1.10.0hadoop集成

  1. 配置環境變量
vi /etc/profile
# 添加如下內容:
export HADOOP_CONF_DIR=/home/hadoop-2.6.5/etc/hadoop
# 使環境變量生效
source /etc/profile
  1. 添加hadoop依賴
    flink-shaded-hadoop-2-uber-2.6.5-10.0.jar
    下載jar包放到/flink-1.10.0/lib目錄下.

參考鏈接-Flink 1.10.0基於高可用部署

使用yarn模式跑flink job

什麼情況下適合使用yarn模式跑flink job?
相對於standalone模式,yarn模式允許flink job的好處有:

  • 資源按需使用,提高集羣的資源利用率
  • 任務有優先級,根據優先級運行作業
  • 基於YARN調度系統,能夠自動化地處理各個角色的failover
    • JobManager進程和TaskManager進程都由Yarn NodeManager監控
    • 如果JobManager進程異常退出,則Yarn ResourceManager會重新調度JobManager到其他機器
    • 如果TaskManager進程異常退出,JobManager會收到消息並重新向Yarn ResourceManager申請資源,重新啓動TaskManager

在YARN上啓動long running的flink集羣(yarn session)

  • Highly Available YARN Session模式
  • yarn是一個集羣資源管理框架。它運行在集羣之上運行各種分佈式應用程序。flink像其他程序一樣,也可以在yarn上運行。用戶不需要設置或者安裝任何東西,如果已經有一個安裝配置好的yarn。
  • 一個session將會包含所有必須的flink 服務(jobmanager和taskmanager),這樣你就可以向這個集羣提交程序了。注意:每個session會話你可以運行多個程序。
  • YARN Session模式只會啓動一個JobManager,如果啓動失敗會重啓.
  • 啓動一個session命令:./bin/yarn-session.sh

命令參數用法:

# 查看命令參數
./bin/yarn-session.sh -h
# 用法:
   必選
     -n,--container <arg>   分配多少個yarn容器 (=taskmanager的數量)
   可選
     -D <arg>                        動態屬性
     -d,--detached                   獨立運行
     -jm,--jobManagerMemory <arg>    JobManager的內存 [in MB]
     -nm,--name                     在YARN上爲一個自定義的應用設置一個名字
     -q,--query                      顯示yarn中可用的資源 (內存, cpu核數)
     -qu,--queue <arg>               指定YARN隊列.
     -s,--slots <arg>                每個TaskManager使用的slots數量
     -tm,--taskManagerMemory <arg>   每個TaskManager的內存 [in MB]
     -z,--zookeeperNamespace <arg>   針對HA模式在zookeeper上創建NameSpace

client必須要設置HADOOP_HOME,YARN_CONF_DIR或者HADOOP_CONF_DIR環境變量,通過這個環境變量來讀取YARNHDFS的配置信息,否則啓動會失敗。

創建一個YARN模式的flink集羣:

./bin/yarn-session.sh -n 4 -jm 1024m -tm 4096m

提交一個flink job到flink集羣:

./bin/flink run examples/streaming/WordCount.jar --input hdfs:///test_dir/input_dir/story --output hdfs:///test_dir/output_dir/output

這次提交flink job,雖然沒有指定對應yarn application的信息,確可以提交到對應的flink集羣,原因在於/tmp/.yarn-properties-${user}文件中保存了上一次創建yarn session的集羣信息。所以如果同一用戶在同一機器上再次創建一個yarn session,則這個文件會被覆蓋掉。

那如果刪掉/tmp/.yarn-properties-${user}或者在另一個機器上提交作業能否提交到預期到yarn session中呢?這也是可以的,如果配置了HighAvailability,則可以根據cluster-id,從zookeeper上獲取到JobManager的地址和端口,從而提交作業。

high-availability.cluster-id

如果Yarn session沒有配置HA,又該如何提交呢?這個時候就必須要在提交flink job的命令中指明YARN上的application id,通過“-yid”參數傳入:

/bin/flink run -yid application_1548056325049_0048 examples/streaming/WordCount.jar --
input hdfs:///test_dir/input_dir/story --output hdfs:///test_dir/output_dir/output

我們可以發現,每次跑完任務不久,TaskManager就沒有了,下次在提交任務的時候,TaskManager又會重新拉起來。如果希望TaskManager啓動後就持續運行,可以在conf/flink-conf.yaml文件中配置下面這個參數,單位是milliseconds,默認值是30000L,即30秒

resourcemanager.taskmanager-timeout

在YARN上運行單個flink job

如果你只想運行單個flink job後就退出,那麼可以用下面這個命令:

./bin/flink run -m yarn-cluster -yn 2 examples/streaming/WordCount.jar --input hdfs:///test_dir/input_dir/story --output hdfs:///test_dir/output_dir/output

常用的配置有:

  • -yn,–yarncontainer Number of Task Managers
  • -yqu,–yarnqueue Specify YARN queue.
  • -ys,–yarnslots Number of slots per TaskManager
  • -yqu,–yarnqueue Specify YARN queue.
    可以通過help命令查看run的可用參數:
./bin/flink run -h

參考鏈接

  • https://blog.csdn.net/xu470438000/article/details/79576989
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章