Flink on Zeppelin 系列之:Yarn Application 模式支持

作者:章剑锋(简锋)

去年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

Flink on Zeppelin 系列之:Yarn Application 模式支持_第1张图片

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

Flink on Zeppelin 系列之:Yarn Application 模式支持_第2张图片

Yarn Application 模式

Yarn Application 模式彻底解决了前面2种模式的问题,把Flink interpreter 跑在了JobManager里,这样既不影响Zeppelin Server这台机器的资源压力,也不会对Yarn集群资源造成任何浪费。

Flink on Zeppelin 系列之:Yarn Application 模式支持_第3张图片

如何使用 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做了一系列增强功能,这些增强功能都可以照常使用,比如:

具体参考文档: https://www.yuque.com/jeffzhangjianfeng/gldg8w/te2l1c

你可能感兴趣的:(flink)