大数据领域 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!

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

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,并修改:

zeppelin.server.addr0.0.0.0Server binding addresszeppelin.server.port18080Server port.

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

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

zeppelin.notebook.storageorg.apache.zeppelin.notebook.repo.FileSystemNotebookRepoHadoop compatible file system notebook persistence layer implementation, such as local file system, hdfs, azure wasb, s3 and etc.zeppelin.notebook.dir/zeppelin/notebookpath or URI for notebook persistzeppelin.recovery.storage.classorg.apache.zeppelin.interpreter.recovery.FileSystemRecoveryStorageReoveryStorage implementation based on hadoop FileSystemzeppelin.recovery.dir/zeppelin/recoveryLocation where recovery metadata is storedzeppelin.anonymous.allowedtrueAnonymous user allowed by default

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

配置 Flink Interpreter on YARN

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

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

Interpreter Binding

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

在这种模式下,每个 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 上运行,如下图所示。

  • 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:

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

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

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

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

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

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

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

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

作者:LittleMagic

本文为阿里云原创内容,未经允许不得转载。

winform 界面 xml化_FlinkSQL 1.11 on Zeppelin平台化实践相关推荐

  1. Flink SQL 1.11 on Zeppelin 平台化实践

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

  2. 神策数据关海南:营销策略引擎解读,以平台化构建营销新生态

    在神策 2021 数据驱动大会现场,神策营销云架构师关海南发表了题为<营销策略引擎(Express)的技术演进>的演讲.本文根据其演讲整理,核心内容如下: 营销中台下的策略引擎 营销策略引 ...

  3. 赋能工业互联网融合发展 | 北京信息化和工业化融合服务联盟平台化设计专业委员会、中国仿真学会CAE仿真专业委员会成立

    11月28日,由北京市经济和信息化局指导,北京信息化和工业化融合服务联盟与中国仿真学会共同主办,联盟平台化设计专业委员会.中国仿真学会CAE仿真专业委员会.国家数字化设计与制造创新中心北京中心.北京数 ...

  4. 移动平台化进程加速 网秦如何实现战略转型?

    在互联网产业,平台化是一个非常重要的话题,因为平台化有助于企业规模的迅速扩大,实现用户体验和用户粘度的提升,因此,实施这种战略的企业一般都能获得比竞争对手更好的发展.从过去的案例来看,依靠平台化战略获 ...

  5. 安居客 Android App 走向平台化 | CSDN 博文精选

    作者 | 张磊 责编 | 屠敏 出品 | CSDN博客 安居客 Android App 距离上次的模块化/组件化重构已经两年多了,重构之后很好的支撑了两年多以来的业务发展.但这个世界总是在向前走的,没 ...

  6. 图示SaaS:走向平台化,会产生什么变化?

    1.'自产自销'通常都会出现'酒香巷子深'的问题 2.平台化后,产生的变化 平台化,会导致收入结构的变化: 走向市场化的结果,即使会让单价降低,也会使自有产品的收入增加: 而总收益的增加将更明显. = ...

  7. 团购网到底该如何实现平台化转型

    在B2C购物网站纷纷平台化的同时,团购网的平台化步伐也悄然开展.美国Groupon通过设立 "Groupon Stores",帮助本地商户创建商户页面.国内的拉手网等也开始了类似的 ...

  8. 团购网如何成功实现平台化转型

    在B2C购物网站纷纷平台化的同时,团购网的平台化步伐也悄然开展.美国Groupon通过设立 "Groupon Stores",帮助本地商户创建商户页面.国内的拉手网等也开始了类似的 ...

  9. 安居客 Android App 走向平台化

    首发于微信公众号:BaronTalk 安居客 Android App 距离上次的模块化/组件化重构已经两年多了,重构之后很好的支撑了两年多以来的业务发展.但这个世界总是在向前走的,没有任何一种架构能够 ...

最新文章

  1. prometheus连续查询_Prometheus查询
  2. 如何通过网站优化的方式提升网站转化率?
  3. Java Bean与Map之间相互转化的实现
  4. Jupyter Nodebook添加代码提示(Vscode配置Jupyter Notebook运行.ipynb文件)
  5. 神策数据加入中国大数据产业生态联盟,神策营销云及融媒解决方案获联盟认证
  6. 【树莓派】树莓派(Debian)- root用户无法使用SSH登录
  7. js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 转载...
  8. xargs -i和-I的区别【转】
  9. Redis在Windows下设置服务启动
  10. python自带的用于解析HTML的库HtmlParser
  11. windows删除文件c语言函数,c rename()函数是否删除文件?
  12. 移动开发的那些事(上)
  13. 学习BMFONT的感想
  14. 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞
  15. Win10最新批量激活
  16. 刘宇凡:新型鸡汤如何击溃传统鸡汤?
  17. window.open 服务器运行失败,win10 openssh服务器安装失败的最佳解决方法
  18. 白马非马----继承
  19. npm ERR! could not determine executable to run
  20. 第二十九天 redis应用

热门文章

  1. 哈佛大学校长: 教育是培养你辨别有人在胡说八道的能力
  2. 一张图看懂中科大、国科大、中科院、社科院、上科大之间的关系
  3. beautifulsoup里面的find()和findall()小代码测试
  4. MyEclipse的Java Web项目配置环境搭建-如何安装tomact
  5. 卷积学习与图像识别的技术发展
  6. 基于OpenCV的区域分割、轮廓检测和阈值处理
  7. Eclipse搭建java分布式商城项目
  8. UWP Composition API - 锁定列的FlexGrid
  9. C与指针课后答案与编程练习(第一章)
  10. 13种编程语言名称的来历