Application mode 是 Flink 1.11 之后引入的新的运行模式,所要解决的问题就是减少客户端的压力,把用户的main函数运行在JobManager里而不是在用户客户端。这种模式是非常适合Flink on Zeppelin的,因为这里的客户端就是Flink interpreter进程,而Flink interpreter是一个long running的main函数,不断接受来自前端的命令,进行相应的操作(比如提交Job,停止Job 等等)。
架构
在介绍Yarn Application 模式的架构之前,我们来回顾下现有的2种运行模式
- 普通的Flink on Yarn 运行模式
这种模式客户端 Flink Interpreter 进程运行在 Zeppelin所在的机器这边,每个客户端对应一个Yarn上的Flink Cluster,如果Flink Interpreter进程很多,会对Zeppelin这台机器造成很大的压力。
- Yarn Interpreter 模式
Yarn Interpreter 把客户端 Flink Interpreter 进程移到了 Yarn集群,把资源压力转移到了Yarn集群,解决上上面普通Flink on Yarn 运行模式的一部分问题,这种模式会需要为每个Flink Cluster额外申请一个Yarn Container来运行这个Flink Interpreter,在资源利用方面并不是很高效。
- Yarn Application 模式
Yarn Application 模式彻底解决了前面2种模式的问题,把Flink interpreter 跑在了JobManager里,这样既不影响Zeppelin Server这台机器的资源压力,也不会对Yarn集群资源造成任何浪费。
如何使用 Yarn Application 模式
配置Yarn Application 模式非常简单,和Yarn 模式基本一样,除了要把 flink.execution.mode 设为yarn-application 。
- 配置 FLINK_HOME ,把flink.execution.mode 设为 yarn-application
- 确保Zeppelin这台机器上安装了hadoop客户端(就是hadoop的那些jar包和配置文件),并且hadoop命令在环境变量 PATH上。,所以flink的推荐方式是在提交Flink作业的时候运行hadoop classpath命令,然后把hadoop相关的jar放到CLASSPATH上。如果用到了HiveCatalog,还需要把flink-shaded-hadoop 拷贝到flink lib下
- 如果用到了PyFlink,需要把 FLINK_HOME/opt/python 拷贝到 FLINK_HOME/lib
下面的所有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)
Hive 整合
简单配置就可以启用Hive,具体参考这个文档 https://www.yuque.com/jeffzhangjianfeng/gldg8w/agf94n
UDF 支持
支持以下4种方式定义和使用Flink UDF
- 在Zeppelin中直接写Scala UDF
- 在Zeppelin中直接写PyFlink UDF
- 用SQL 创建 UDF
- 使用flink.udf.jars 来指定含有udf的jar
具体参考文档 https://www.yuque.com/jeffzhangjianfeng/gldg8w/dthfu2
第三方依赖
在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
Checkpoint & Savepoint
Checkpoint 和 Savepoint 照常使用,具体参考文档:https://www.yuque.com/jeffzhangjianfeng/gldg8w/mlnswx
SQL 高级功能
Zeppelin 对 Flink SQL做了一系列增强功能,这些增强功能都可以照常使用,比如:
具体参考文档:https://www.yuque.com/jeffzhangjianfeng/gldg8w/te2l1c