写点什么

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

用户头像
Apache Flink
关注
发布于: 2021 年 05 月 06 日
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 server 这台机器上,每个客户端对应一个 Yarn 上的 Flink Cluster,如果 Flink Interpreter 进程很多,会对 Zeppelin 这台机器造成很大的压力。


参考文档:

https://www.yuque.com/jeffzhangjianfeng/gldg8w/wt1g3h

参考视频:

https://www.bilibili.com/video/BV1Te411W73b?p=6


image.png


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


image.png


Yarn Application 模式


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


image.png


二、如何使用 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=17https://www.bilibili.com/video/BV1Te411W73b?p=18https://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


发布于: 2021 年 05 月 06 日阅读数: 88
用户头像

Apache Flink

关注

Apache Flink 中文社区 2020.04.29 加入

官方微信号:Ververica2019 微信公众号:Flink 中文社区 钉钉群链接:https://c.tb.cn/F3.01p2Y5 Apache Flink 学习网站:https://flink-learning.org.cn/ Apache Flink 官方帐号,Flink PMC 维护

评论

发布
暂无评论
Flink on Zeppelin 系列之:Yarn Application 模式支持