Flink Yarn的2種任務提交方式
Pre-Job模式介紹
每次使用flink run運行任務的時候,Yarn都會重新申請Flink集群資源(JobManager和TaskManager),任務執行完成之后,所申請的Flink集群資源就會釋放,所申請的Yarn資源是獨享的,不與其他任務分享資源。
運行命令
./bin/flink run -m yarn-cluster -yn 3 -ys 12 -p 4
-yjm 1024m -ytm 4096m ./examples/batch/WordCount.jar
參數解讀:
-p 並行度
-yn Task Managers數量
-ys 每個TaskManager的Slot數量
-yjm 每個JobManager內存 (default: MB)
-ytm 每個TaskManager內存 (default: MB)
Session模式介紹
需要先在yarn上先分配一個flink集群,后續所有任務都共享這個Flink集群上的資源,該Flink不會因為任務的結束而終止。
先向Yarn申請Flink所需資源
flink客戶端目錄下,執行如下命令:
bin/yarn-session.sh -jm 1024m -tm 4096m -n 4 -s 8 -na hdq-yarn
參數含義:
-jm jobmanager的內存大小
-tm taskManager的內存大小
-n taskManager個個數
-s 每個taskManager中slot的個數
執行完成之后會輸出如下日志:
Flink JobManager is now running on 172-16-122-56:9101 with leader id 00000000-0000-0000-0000-000000000000.
JobManager Web Interface: http://172-16-122-56:9101
運行完成后,Yarn的集群上會有一個常駐任務。
此時,Flink集群的資源都已經申請完畢。
這里需要記住JobManager的ip和端口:172-16-122-56:9101,等會運行Flink任務的時候需要修改這里的配置。
運行Flink程序
運行Flink任務之前需要修改Flink客戶端下的配置文件:conf/flink-conf.yaml
分別修改jobmanager.rpc.address和rest.port,對應第二步中的172-16-122-56和9101。
jobmanager.rpc.address: 172-16-122-56
rest.port: 9101
修改完成之后即可運行Flink任務:
/flink/bin/flink run
-C file:/plugins/oraclereader/flinkx-oracle-reader.jar
-C file:/plugins/mysqlwriter/flinkx-mysql-writer.jar
-C file:/plugins/common/flinkx-rdb.jar
-C file:/plugins/common/flinkx-rdb-2.0.0.jar
-C file:/plugins/common/flink-table_2.11-1.7.2.jar /plugins/flinkx.jar
-job fx_2065.json
-pluginRoot /plugins
-jobid 2065
此時,flink會自動將任務提交到我們申請的Flink集群上進行運行。
注意事項
如果程序依賴第三方jar,通過-C傳參的方式進行依賴,那么整個Yarn集群都要有jar文件。
其中-C所指定的所有jar文件,在整個Yarn集群的機器上都必須存在,否則運行會失敗。不支持hdfs共享存儲,支持ftp等其他協議。
總結
- Pre-Job模式: 運行時需要會自動申請Yarn資源,申請完成后才能運行任務,並且所申請的資源是該任務獨享的,運行完成后資源會自動釋放;適合資源消耗比較大的情況。
- Session模式: 運行之前需要在Yarn上先申請好資源才能提交任務,所有任務會共享資源,適合小任務運行。