Flink SQL 1.11 on Zeppelin 平台化实践

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 鉴于有很多企业都无法配备专门的团队来解决 Flink SQL 平台化的问题,那么到底有没有一个开源的、开箱即用的、功能相对完善的组件呢?答案就是本文的主角——Apache Zeppelin。

作者:LittleMagic

大数据领域 SQL 化开发的风潮方兴未艾(所谓"Everybody knows SQL"),Flink 自然也不能“免俗”。Flink SQL 是 Flink 系统内部最高级别的 API,也是流批一体思想的集大成者。用户可以通过简单明了的 SQL 语句像查表一样执行流任务或批任务,屏蔽了底层 DataStream/DataSet API 的复杂细节,降低了使用门槛。

但是,Flink SQL 的默认开发方式是通过 Java/Scala API 编写,与纯 SQL 化、平台化的目标相去甚远。目前官方提供的 Flink SQL Client 仅能在配备 Flink 客户端的本地使用,局限性很大。而 Ververica 开源的 Flink SQL Gateway 组件是基于 REST API 的,仍然需要二次开发才能供给上层使用,并不是很方便。

鉴于有很多企业都无法配备专门的团队来解决 Flink SQL 平台化的问题,那么到底有没有一个开源的、开箱即用的、功能相对完善的组件呢?答案就是本文的主角——Apache Zeppelin。

Flink SQL on Zeppelin!

1.jpg

Zeppelin 是基于 Web 的交互式数据分析笔记本,支持 SQL、Scala、Python 等语言。Zeppelin 通过插件化的 Interpreter(解释器)来解析用户提交的代码,并将其转化到对应的后端(计算框架、数据库等)执行,灵活性很高。其架构简图如下所示。

2.jpg

Flink Interpreter 就是 Zeppelin 原生支持的众多 Interpreters 之一。只要配置好 Flink Interpreter 以及相关的执行环境,我们就可以将 Zeppelin 用作 Flink SQL 作业的开发平台了(当然,Scala 和 Python 也是没问题的)。接下来本文就逐步介绍 Flink on Zeppelin 的集成方法。

配置 Zeppelin

目前 Zeppelin 的最新版本是 0.9.0-preview2,可以在官网下载包含所有 Interpreters 的 zeppelin-0.9.0-preview2-bin-all.tgz,并解压到服务器的合适位置。

接下来进入 conf 目录。将环境配置文件 zeppelin-env.sh.template 更名为 zeppelin-env.sh,并修改:

# JDK目录
export JAVA_HOME=/opt/jdk1.8.0_172
# 方便之后配置Interpreter on YARN模式。注意必须安装Hadoop,且hadoop必须配置在系统环境变量PATH中
export USE_HADOOP=true
# Hadoop配置文件目录
export HADOOP_CONF_DIR=/etc/hadoop/hadoop-conf

将服务配置文件 zeppelin-site.xml.template 更名为 zeppelin-site.xml,并修改:

<!-- 服务地址。默认为127.0.0.1,改为0.0.0.0使得可以在外部访问 -->
<property>
  <name>zeppelin.server.addr</name>
  <value>0.0.0.0</value>
  <description>Server binding address</description>
</property>

<!-- 服务端口。默认为8080,如果已占用,可以修改之 -->
<property>
  <name>zeppelin.server.port</name>
  <value>18080</value>
  <description>Server port.</description>
</property>

最基础的配置就完成了。运行 bin/zeppelin-daemon.sh start 命令,返回 Zeppelin start [ OK ]的提示之后,访问<服务器地址>:18080,出现下面的页面,就表示 Zeppelin 服务启动成功。

3.jpg

当然,为了一步到位适应生产环境,也可以适当修改 zeppelin-site.xml 中的以下参数:

<!-- 将Notebook repo更改为HDFS存储 -->
<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.FileSystemNotebookRepo</value>
  <description>Hadoop compatible file system notebook persistence layer implementation, such as local file system, hdfs, azure wasb, s3 and etc.</description>
</property>

<!-- Notebook在HDFS上的存储路径 -->
<property>
  <name>zeppelin.notebook.dir</name>
  <value>/zeppelin/notebook</value>
  <description>path or URI for notebook persist</description>
</property>

<!-- 启用Zeppelin的恢复功能。当Zeppelin服务挂掉并重启之后,能连接到原来运行的Interpreter -->
<property>
  <name>zeppelin.recovery.storage.class</name>
  <value>org.apache.zeppelin.interpreter.recovery.FileSystemRecoveryStorage</value>
  <description>ReoveryStorage implementation based on hadoop FileSystem</description>
</property>

<!-- Zeppelin恢复元数据在HDFS上的存储路径 -->
<property>
  <name>zeppelin.recovery.dir</name>
  <value>/zeppelin/recovery</value>
  <description>Location where recovery metadata is stored</description>
</property>

<!-- 禁止使用匿名用户 -->
<property>
  <name>zeppelin.anonymous.allowed</name>
  <value>true</value>
  <description>Anonymous user allowed by default</description>
</property>

Zeppelin 集成了 Shiro 实现权限管理。禁止使用匿名用户之后,可以在 conf 目录下的 shiro.ini 中配置用户名、密码、角色等,不再赘述。注意每次修改配置都需要运行 bin/zeppelin-daemon.sh restart 重启 Zeppelin 服务。

配置 Flink Interpreter on YARN

在使用 Flink Interpreter 之前,我们有必要对它进行配置,使 Flink 作业和 Interpreter 本身在 YARN 环境中运行。

点击首页用户名区域菜单中的 Interpreter 项(上一节图中已经示出),搜索 Flink,就可以看到参数列表。

4.jpg

Interpreter Binding

首先,将 Interpreter Binding 模式修改为 Isolated per Note,如下图所示。

5.jpg

在这种模式下,每个 Note 在执行时会分别启动 Interpreter 进程,类似于 Flink on YARN 的 Per-job 模式,最符合生产环境的需要。

Flink on YARN 参数

以下是需要修改的部分基础参数。注意这些参数也可以在 Note 中指定,每个作业自己的配置会覆盖掉这里的默认配置。

  • FLINK_HOME:Flink 1.11所在的目录;
  • HADOOP_CONF_DIR:Hadoop 配置文件所在的目录;
  • flink.execution.mode:Flink 作业的执行模式,指定为 YARN 以启用 Flink on YARN;
  • flink.jm.memory:JobManager 的内存量(MB);
  • flink.tm.memory:TaskManager 的内存量(MB);
  • flink.tm.slot:TaskManager 的 Slot 数;
  • flink.yarn.appName:YARN Application 的默认名称;
  • flink.yarn.queue:提交作业的默认 YARN 队列。

Hive Integration 参数

如果我们想访问 Hive 数据,以及用 HiveCatalog 管理 Flink SQL 的元数据,还需要配置与 Hive 的集成。

  • HIVE_CONF_DIR:Hive 配置文件(hive-site.xml)所在的目录;
  • zeppelin.flink.enableHive:设为 true 以启用 Hive Integration;
  • zeppelin.flink.hive.version:Hive 版本号。
  • 复制与 Hive Integration 相关的依赖到 $FLINK_HOME/lib 目录下,包括:
  • flink-connector-hive_2.11-1.11.0.jar
  • flink-hadoop-compatibility_2.11-1.11.0.jar
  • hive-exec-..jar
  • 如果 Hive 版本是1.x,还需要额外加入 hive-metastore-1.*.jar、libfb303-0.9.2.jar 和 libthrift-0.9.2.jar
  • 保证 Hive 元数据服务(Metastore)启动。注意不能是 Embedded 模式,即必须以外部数据库(MySQL、Postgres等)作为元数据存储。

Interpreter on YARN 参数

在默认情况下,Interpreter 进程是在部署 Zeppelin 服务的节点上启动的。随着提交的任务越来越多,就会出现单点问题。因此我们需要让 Interpreter 也在 YARN 上运行,如下图所示。

6.jpg

  • zeppelin.interpreter.yarn.resource.cores:Interpreter Container 占用的vCore 数量;
  • zeppelin.interpreter.yarn.resource.memory:Interpreter Container 占用的内存量(MB);
  • zeppelin.interpreter.yarn.queue:Interpreter 所处的 YARN 队列名称。

配置完成之后,Flink on Zeppelin 集成完毕,可以测试一下了。

测试 Flink SQL on Zeppelin

创建一个 Note,Interpreter 指定为 Flink。然后写入第一个 Paragraph:

7.jpg

以 %flink.conf 标记的 Paragraph 用于指定这个 Note 中的作业配置,支持 Flink 的所有配置参数(参见 Flink 官网)。另外,flink.execution.packages 参数支持以 Maven GAV 坐标的方式引入外部依赖项。

接下来创建第二个 Paragraph,创建 Kafka 流表:

8.jpg

%flink.ssql 表示利用 StreamTableEnvironment 执行流处理 SQL,相对地,%flink.bsql 表示利用 BatchTableEnvironment 执行批处理 SQL。注意表参数中的 properties.bootstrap.servers 利用了 Zeppelin Credentials 来填写,方便不同作业之间复用。

执行上述 SQL 之后会输出信息:

9.jpg

同时在 Hive 中可以看到该表的元数据。

最后写第三个 Paragraph,从流表中查询,并实时展现出来:

10.jpg

点击右上角的 FLINK JOB 标记,可以打开作业的 Web UI。上述作业的 JobGraph 如下。

11.jpg

除 SELECT 查询外,通过 Zeppelin 也可以执行 INSERT 查询,实现更加丰富的功能。关于 Flink SQL on Zeppelin 的更多应用,笔者在今后的文章中会继续讲解。

更多 Flink 技术交流可加入 Apache Flink 社区钉钉交流群:

最新钉群二维码.jpeg

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
4月前
|
存储 消息中间件 人工智能
Lazada 如何用实时计算 Flink + Hologres 构建实时商品选品平台
本文整理自 Lazada Group EVP 及供应链技术负责人陈立群在 Flink Forward Asia 2025 新加坡实时分析专场的分享。作为东南亚领先的电商平台,Lazada 面临在六国管理数十亿商品 SKU 的挑战。为实现毫秒级数据驱动决策,Lazada 基于阿里云实时计算 Flink 和 Hologres 打造端到端实时商品选品平台,支撑日常运营与大促期间分钟级响应。本文深入解析该平台如何通过流式处理与实时分析技术重构电商数据架构,实现从“事后分析”到“事中调控”的跃迁。
438 55
Lazada 如何用实时计算 Flink + Hologres 构建实时商品选品平台
|
4月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
791 43
|
4月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
284 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
2月前
|
存储 消息中间件 人工智能
云栖实录|实时计算 Flink 全新升级 - 全栈流处理平台助力实时智能
本文根据 2025 云栖大会演讲整理而成,演讲信息如下 演讲人:黄鹏程 阿里云智能集团计算平台事业部实时计算Flink版产品负责人
175 1
云栖实录|实时计算 Flink 全新升级 - 全栈流处理平台助力实时智能
|
5月前
|
SQL 消息中间件 Kafka
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是 Apache Flink 提供的 SQL 引擎,支持流批一体处理,统一操作流数据与批数据,具备高性能、低延迟、丰富数据源支持及标准 SQL 兼容性,适用于实时与离线数据分析。
874 1
|
6月前
|
资源调度 Kubernetes 流计算
Flink在B站的大规模云原生实践
本文基于哔哩哔哩资深开发工程师丁国涛在Flink Forward Asia 2024云原生专场的分享,围绕Flink On K8S的实践展开。内容涵盖五个部分:背景介绍、功能及稳定性优化、性能优化、运维优化和未来展望。文章详细分析了从YARN迁移到K8S的优势与挑战,包括资源池统一、环境一致性改进及隔离性提升,并针对镜像优化、Pod异常处理、启动速度优化等问题提出解决方案。此外,还探讨了多机房容灾、负载均衡及潮汐混部等未来发展方向,为Flink云原生化提供了全面的技术参考。
347 9
Flink在B站的大规模云原生实践
|
7月前
|
SQL 存储 NoSQL
Flink x Paimon 在抖音集团生活服务的落地实践
本文整理自抖音集团数据工程师陆魏与流式计算工程冯向宇在Flink Forward Asia 2024的分享,聚焦抖音生活服务业务中的实时数仓技术演变及Paimon湖仓实践。文章分为三部分:背景及现状、Paimon湖仓实践与技术优化。通过引入Paimon,解决了传统实时数仓开发效率低、资源浪费、稳定性差等问题,显著提升了开发运维效率、节省资源并增强了任务稳定性。同时,文中详细探讨了Paimon在维表实践、宽表建设、标签变更检测等场景的应用,并介绍了其核心技术优化与未来规划。
649 10
Flink x Paimon 在抖音集团生活服务的落地实践
|
SQL 资源调度 数据可视化
Flink 最佳搭档:开发部署平台 Zeppelin 的自白
Flink 的学习者或者爱好者想必十分了解,除了需要熟悉 Flink 本身之外,如果能有一款简单上手的 Flink 开发部署工具,不用写前端代码就能实现实时大屏、支持全部语言接口、支持多条 SQL,还能管理 Flink Job,这样的开发部署平台是不是完全无法拒绝?
Flink 最佳搭档:开发部署平台 Zeppelin 的自白
|
4月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
482 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄

相关产品

  • 实时计算 Flink版