共计 2767 个字符,预计需要花费 7 分钟才能阅读完成。
作者:章剑锋(简锋)
去年 Flink Forward 在讲 Flink on Zeppelin 这个我的项目的将来时咱们谈到了对 Application 模式的反对,明天就有一个好消息要通知大家,社区曾经实现了这一 Feature,欢送大家下载最新版来应用这个 Feature。
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 这边,每个客户端对应一个 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 流式数据可视化
具体参考文档:https://www.yuque.com/jeffzhangjianfeng/gldg8w/te2l1c