Flink Yarn的2種任務提交方式

小東/yb 發表於 2021-10-24
Flink

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上先申請好資源才能提交任務,所有任務會共享資源,適合小任務執行。