作者:章劍鋒(簡鋒)
去年 Flink Forward 在講 Flink on Zeppelin 這個項目的未來時我們談到了對Application 模式的支援,今天就有一個好消息要告訴大家,社群已經實作了這一Feature,歡迎大家加入 Flink on Zeppelin 的釘釘群(32803524),下載下傳最新版來使用這個Feature。
GitHub 位址
https://github.com/apache/flink歡迎大家給 Flink 點贊送 star~
Application mode 是 Flink 1.11 之後引入的新的運作模式,所要解決的問題就是減少用戶端的壓力,把使用者的 main 函數運作在 JobManager 裡而不是在使用者用戶端。這種模式是非常适合 Flink on Zeppelin 的,因為 Flink on Zeppelin 的用戶端就是 Flink interpreter 程序,而 Flink interpreter 是一個 long running 的 main 函數,不斷接受來自前端的指令,進行相應的操作(比如送出 Job,停止 Job 等等)。接下來我們就要詳細講下 Zeppelin 如何實作了 Yarn Application 模式,以及如何使用這一模式。
一、架構
在講 Yarn Application 模式架構的時候,我們順便來講下 Flink on Zeppelin 的架構演變過程。
普通的 Flink on Yarn 運作模式
這種模式的用戶端中,Flink Interpreter 程序運作在 Zeppelin server這台機器上,每個用戶端對應一個 Yarn 上的 Flink Cluster,如果 Flink Interpreter 程序很多,會對 Zeppelin 這台機器造成很大的壓力。
參考文檔: https://www.yuque.com/jeffzhangjianfeng/gldg8w/wt1g3h 參考視訊: https://www.bilibili.com/video/BV1Te411W73b?p=6
Yarn Interpreter 模式
Yarn Interpreter 把用戶端 (Flink Interpreter)移到了 Yarn 叢集,把資源壓力轉移到了 Yarn 叢集,解決上上面普通 Flink on Yarn 運作模式的一部分問題,這種模式會需要為每個 Flink Cluster 額外申請一個 Yarn Container 來運作這個 Flink Interpreter,在資源利用方面并不是很高效。
https://www.yuque.com/jeffzhangjianfeng/gldg8w/gcah8t https://www.bilibili.com/video/BV1Te411W73b?p=24
Yarn Application 模式
Yarn Application 模式徹底解決了前面 2 種模式的問題,把 Flink interpreter 跑在了 JobManager 裡,這樣既不影響 Zeppelin Server 這台機器的資源壓力,也不會對 Yarn 叢集資源造成任何浪費。
二、如何使用 Yarn Application 模式
配置 Yarn Application 模式非常簡單,隻要把 flink.execution.mode 設為yarn-application 即可。其他所有配置與其他模式沒有差別。下面的所有 Flink on Zeppelin 的特性在 Yarn Application 模式下都可以照常使用。我們也借這個機會來 Review下Flink on Zeppelin 的所有功能。
多語言支援
在同一個 Flink Cluster 内支援以下 3 種語言,并且打通這 3 種語言(共享Catalog,共享 ExecutionEnvironment):
- Scala (%flink)
- PyFlink (%flink.pyflink)
- SQL (%flink.ssql, %flink.bsql)
https://www.yuque.com/jeffzhangjianfeng/gldg8w/pg5s82 https://www.yuque.com/jeffzhangjianfeng/gldg8w/ggxz76 https://www.yuque.com/jeffzhangjianfeng/gldg8w/te2l1c https://www.bilibili.com/video/BV1Te411W73b?p=4
Hive 整合
簡單配置就可以啟用 Hive。
https://www.yuque.com/jeffzhangjianfeng/gldg8w/agf94n https://www.bilibili.com/video/BV1Te411W73b?p=10
UDF 支援
支援以下 4 種方式定義和使用 Flink UDF:
- 在 Zeppelin 中直接寫 Scala UDF;
- 在 Zeppelin 中直接寫 PyFlink UDF;
- 用 SQL 建立 UDF;
- 使用 flink.udf.jars 來指定含有 udf 的 jar。
https://www.yuque.com/jeffzhangjianfeng/gldg8w/dthfu2 https://www.bilibili.com/video/BV1Te411W73b?p=17 https://www.bilibili.com/video/BV1Te411W73b?p=18 https://www.bilibili.com/video/BV1Te411W73b?p=19
第三方依賴
在 Zeppelin 裡可以用以下 2 種方式來指定第三方依賴,具體:
- flink.excuetion.packages
- flink.execution.jars (需要注意的是在 Yarn Application 模式下,這裡需要指定 HDFS 路徑,因為 Flink Interpreter 運作在 JobManager 裡,而JobManager 是跑在 yarn container, 在 yarn container 那台 NodeManager 機器上不一定有你要指定的 jar)
https://www.yuque.com/jeffzhangjianfeng/gldg8w/rn6g1s https://www.bilibili.com/video/BV1Te411W73b?p=15
Checkpoint & Savepoint
Checkpoint 和 Savepoint 照常使用。
https://www.yuque.com/jeffzhangjianfeng/gldg8w/mlnswx
SQL 進階功能
Zeppelin 對 Flink SQL做了一系列增強功能,這些增強功能都可以照常使用,比如:
- 同時支援 Batch SQL 和 Streaming SQL
- 多語句支援
- Comment 支援
- Job 并行度支援
- Multiple insert 支援
- JobName 的設定
- Stream SQL 流式資料可視化
具體參考文檔:
另外,阿裡雲開放平台團隊長期招聘優秀大資料人才(包括實習+社招)。我們的主要職責為阿裡雲上的各大中小企業客戶提供大資料和 AI 的基礎服務。你的工作将是圍繞 Spark,Flink,Hadoop,Tensorflow,PyTorch 等開源元件建構一個易用的,企業級的大資料和 AI 開放平台。不僅有技術的挑戰,也需要做産品的激情。我們采用大量的開源技術(Hadoop, Flink, Spark, Zeppelin, Kubernetes,Tensorflow,Pytorch等等),并且緻力于回饋到開源社群。
如果你對開源,大資料或者 AI 感興趣,這裡有最好的土壤。擁有在 Apache Flink, Apache Kafka, Apache Zeppelin,Apache Beam,Apache Druid,Apache Hbase 等諸多開源領域的 Committer & PMC。感興趣的同學請發履歷到:[email protected]
更多 Flink 相關技術問題,可掃碼加入社群釘釘交流群~
活動推薦
阿裡雲基于 Apache Flink 建構的企業級産品-實時計算Flink版現開啟活動:
99元試用
實時計算Flink版(包年包月、10CU)即有機會獲得 Flink 獨家定制T恤;另包3個月及以上還有85折優惠!
了解活動詳情:
https://www.aliyun.com/product/bigdata/sc