高可用Flink on YARN叢集快速配置
我們長久以來一直使用Spark作為離線和近實時計算框架,幾乎承擔了主要業務中所有的計算任務。最近Flink逐漸興起,我們通過查閱資料和參加Meetup,瞭解到Flink在實時計算方面確實比Spark有優勢。我們正準備涉足實時業務,實時數倉、實時推薦這些東西總是要有的,快速上手Flink勢在必行。
Flink的官方文件比較詳盡,並且設計理念與Spark多有相通,理解成本較低。Flink有多種叢集部署方式(Local/Standalone/YARN/K8s/Mesos等等),考慮到已經有現成的YARN和ZooKeeper叢集,所以直接配置Flink on YARN。
下圖示出Flink on YARN的基本原理,可見與Spark on YARN非常相似。
首先設定Hadoop路徑的環境變數,Flink需要用它來獲取HDFS、YARN的配置資訊。
~ vim /etc/profile
export HADOOP_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop
然後編輯flink-conf.yaml,其中包含了Flink的基礎配置。
- 資源引數
# JobManager堆記憶體
jobmanager.heap.mb: 1024
# TaskManager堆記憶體
taskmanager.heap.mb: 2048
# 每個TaskManager上task slot數目
taskmanager.numberOfTaskSlots: 4
# 預設並行度
parallelism.default: 12
以上四項只是給出預設配置,實際執行作業時都可以用對應的命令列引數(-jm、-tm、-s、-p)修改。
- 高可用配置
# 開啟基於ZK的高可用
high-availability: zookeeper
# ZK叢集(即所謂Quorum)地址
high-availability.zookeeper.quorum: ha1:2181,ha2:2181,ha3:2181
# Flink在ZK儲存中的根節點
high-availability.zookeeper.path.root: /flink
# JobManager後設資料的持久化位置,必須是可靠儲存
high-availability.storageDir: hdfs://mycluster/flink/ha/
# 程式啟動時的最大嘗試次數
# 應當與YARN ApplicationMaster的最大嘗試次數(yarn.resourcemanager.am.max-attempts)相同
yarn.application-attempts: 4
注意YARN ApplicationMaster的最大嘗試次數(yarn.resourcemanager.am.max-attempts)預設值僅為2,使得作業容錯率很低,因此預先把它修改為4,或者更大些。
- StateBackend預設配置
# StateBackend型別
# 可選jobmanager(JM本身)/filesystem(外部檔案系統)/rocksdb(自帶的RocksDB資料庫)
state.backend: filesystem
# 檢查點目錄
state.checkpoints.dir: hdfs://mycluster/flink-checkpoints
# 儲存點目錄(比檢查點更重量級,一般手動操作,用於重啟恢復)
state.savepoints.dir: hdfs://mycluster/flink-savepoints
選擇filesystem或者rocksdb的話,可靠性比較高。對於輕量級的、邏輯不復雜的任務,可以選擇jobmanager。程式中也能通過StreamExecutionEnvironment.setStateBackend()方法來指定。
- 額外的JVM引數
env.java.opts: -server -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError
這個類似於spark-submit中的extraJavaOptions。
Flink on YARN有兩種執行模式。
- Session模式:通過yarn-session.sh建立一個持續執行的Flink Session,其中已經分配好了JobManager、TaskManager及所需資源,提交作業時,相當於提交給Session。
- Single job模式:通過flink run指令碼每次提交單個作業,設定JobManager為yarn-cluster,由YARN單獨分配資源,類似於spark-submit的yarn-cluster部署模式。生產環境一般用這種模式,下面是示例指令碼。
/opt/flink-1.5.1/bin/flink run \
# 分離模式執行 (-d)
--detached \
# 指定JobManager (-m)
--jobmanager yarn-cluster \
# YARN Application的名稱 (-ynm)
--yarnname "test-calendar-rt" \
# 分配的YARN Container數量 (-yn)
--yarncontainer 3 \
# JobManager記憶體 (-yjm)
--yarnjobManagerMemory 1024 \
# TaskManager記憶體 (-ytm)
--yarntaskManagerMemory 2048 \
# 每個TaskManager上task slot數目 (-ys)
--yarnslots 3 \
# 並行度 (-p)
--parallelism 9 \
# 使用者程式的入口類 (-c)
--class com.xyz.bigdata.rt.flink.CalendarRecordETLTest \
/var/projects/rt/flink-test-0.1-jar-with-dependencies.jar
相關文章
- Redis操作及叢集搭建以及高可用配置Redis
- PostgreSQL repmgr高可用叢集+keepalived高可用SQL
- 快速掌握RabbitMQ(五)——搭建高可用的RabbitMQ叢集MQ
- Redis叢集與高可用Redis
- 搭建 Kubernetes 高可用叢集
- PostgreSQL patroni高可用叢集SQL
- zookeeper 高可用叢集搭建
- MongoDB高可用叢集搭建MongoDB
- 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 叢集
- RabbitMQ從零到叢集高可用(.NetCore5.0) -高可用叢集構建落地MQNetCore
- WEB叢集- 高可用服務Web
- Redis快取高可用叢集Redis快取
- 高可用mongodb叢集(分片+副本)MongoDB
- mysql高可用叢集之MMMMySql
- 10、redis哨兵叢集高可用Redis
- Eureka高可用叢集服務端和客戶端配置服務端客戶端
- 使用Kubeadm搭建高可用Kubernetes叢集
- Redis高可用-主從,哨兵,叢集Redis
- 高可用叢集之corosync+pacemakerROS
- 搭建spark on yarn 叢集SparkYarn
- Kubernetes-高可用叢集證書更新
- 部署Kubernetes v1.22.10高可用叢集
- 基於 Rainbond 部署 DolphinScheduler 高可用叢集AI
- 在Rainbond上部署高可用Apollo叢集AI
- 高可用叢集環境搭建-留檔
- 搭建高可用kubernetes叢集(keepalived+haproxy)
- RabbitMQ和Kafka的高可用叢集原理MQKafka
- 使用Keepalived構建LVS高可用叢集
- 基於 ZooKeeper 搭建 Spark 高可用叢集Spark
- 基於 ZooKeeper 搭建 Hadoop 高可用叢集Hadoop
- 搭建 MySQL 高可用高效能叢集MySql
- 4 種高可用 RocketMQ 叢集搭建方案!MQ
- redis通訊與高可用叢集原理Redis
- Oracle的三種高可用叢集方案Oracle
- Keepalived高可用叢集工作原理示意圖
- Flink 叢集執行原理兼部署及Yarn執行模式深入剖析-Flink牛刀小試Yarn模式
- Kafka高可用叢集部署與配置指南Kafka
- 構建生產環境可用的高可用kubernetes叢集