Flink SQL任务自动生成与提交
起因
事情的起因,是看到一篇公众号文章Apache Flink 在汽车之家的应用与实践,里面提到了“基于 SQL 的开发流程”。在平台提供以上功能的基础上,用户可以快速的实现 SQL 作业的开发:
创建一个 SQL 任务;
1.编写 DDL 声明 Source 和 Sink;
2.编写 DML,完成主要业务逻辑的实现;
3.在线查看结果,若数据符合预期,添加 INSERT INTO 语句,写入到指定 Sink 中即可。
即这种功能:
之前也写过一个spark自动提交任务的小项目,但始终无法做到简单交互自动生成任务,因而最终没有用到生产环境当中。Flink的SQL是Flink生态里的一等公民,可以做到直接一条SQL语句把数据源source加载到一张表,也可以一条SQL语句把数据写入到sink终端。这让交互式自动生成任务能够简单实现。
本文前提是,简单实现。如果不考虑性价比,当然也可以做到一个WEB系统,全交互式,点点点,需要的什么参数,什么功能提交到后台,解析生成任务也是可以做的,但这样性价比不高。
思路
1.首先是一个简单的WEB系统,后台springboot可以快速实现,前端thymeleaf可以快速做一个简单的页面,不考虑CSS,JS。
2.然后提供一个页面,传入flink集群参数,mainclass,parallelism等,以及业务参数,主要是sourceSql,sinkSql,transformationSql。然后后台提供一个Flink任务的模板,将sourceSql,sinkSql,transformationSql这三个参数替换掉。再编译成class并生成jar包。
3.然后将jar包提交到flink集群,再将任务提交到集群。
这一点可以通过Flink提供的restapi实现。
https://nightlies.apache.org/flink/flink-docs-release-1.13/zh/docs/ops/rest_api/
关于第2点,也可以在模板当中以提供参数的形式传入sourceSql,sinkSql,transformationSql,flink 在提交任务的接口里也提供了这样的参数program-args,但只适合简单的参数,像sql语句这种带大量的引号,空格,换行符不建议这样传参。
实现
功能本身实现起来倒没太大问题。代码就不提供了,光占篇幅。有兴趣的同学可以看github仓库,这里
1.配置
需要修改application的以下4个配置
分别是
flink集群的访问地址,
布置WEB服务的根目录地址,
编译flink任务所依赖的jar包目录,
flink任务main class,也就是flink任务模板的路径(不要写成包名的格式)
flinkurl=http://localhost:8081
rootpath=D://ideaproject//test//flink_remotesubmit
dependmentpath=D://ideaproject//test//flink_remotesubmit//lib
mainpath=//src//main//java//com//yp//flink//model//TableApiModel.java
2.界面如下
提交成功后,请确保浏览器没有阻止弹窗,跳转到flink任务界面
3.环境
基于
flink 1.13.2
spring boot 2.5
问题
遇到的问题,来自于汽车之家的那张图。就文章里表述的需求来说,需要每天按小时统计PV,UV。
1.flink 的kafka connector 目前只支持批模式(有界数据),不支持流模式(无界)。
如图中红色标记处。
如果按inStreamingMode,那就是实时统计,没法设定batch频次;如果按inBatchMode批次,上图可见,目前不支持。而且kafka connector里参数也只支持kafka的起始位置,不支持结束位置。
所以这里怎么实现的?目前不得而知。
2.还是如上图所见,在sink的时候是只支持append模式,而在append模式下,不支持group by,因为使用了group by 会改行结果行。
如果强行使用group by 将会抛出异常:
目前sink只支持append模式,如果使用了group by 等会改变结果行,会报错:AppendStreamTableSink doesn't support consuming update changes which is produced by node GroupAggregate
所以对kafka数据源进行sink的怎样进行分组聚合?
update:
以上两个问题的解决方案,通过改写flink源码已经解决,代码如下:
https://github.com/nyingping/flink/releases/tag/v14.0-kafkaconnector-batchmode
Flink SQL还是非常强大的。前几天发布的flink 14版本,批执行模式现在支持在同一应用中混合使用 DataStream API 和 SQL/Table API(此前仅支持单独使用 DataStream API 或 SQL/Table API)。也引入了更多的connetor。
Flink SQL任务自动生成与提交的更多相关文章
- 《Flink SQL任务自动生成与提交》后续:修改flink源码实现kafka connector BatchMode
目录 问题 思路 kafka参数问题 支持batchmode的问题 参数提交至kafkasource的问题 group by支持问题 实现 编译 测试 因为在一篇博文上看到介绍"汽车之家介绍 ...
- Excel 数据导入SQL XML 自动生成表头
去出差的时候应客户要求要要将Excel 文件内的数据批量导入到数据库中,而且有各种不同种类的表格,如果每一个表格多对应一个数据表的话, 按照正常的方法应该是创建数据表,创建数据库中映射的数据模型,然后 ...
- Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public ...
- 利用"SQL"语句自动生成序号的两种方式
1.首先,我们来介绍第一种方式: ◆查询的SQL语句如下: select row_number() over (order by name) as rowid, sysobjects.[id] fro ...
- 利用"SQL"语句自动生成序号的两种方式
1.首先,我们来介绍第一种方式: ◆查询的SQL语句如下: select row_number() over (order by name) as rowid, sysobjects.[name] f ...
- PowerDesigner导出SQL时自动生成注释
在powerBuilder中新建一个Physical Data Model,在其中新建一个用户表,信息如下图所示: 此时的SQL语句可从其中的Preview视图中得到,如下图所示: 这个时候生成的sq ...
- SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL
SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...
- 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL
原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...
- EF6.0 下sql语句自动生成的参数类型decimal(18,2)修改
很多时候我们需要对插入到数据库的数据的精度做一个控制,例如sql server下保留6位小数使用numeric(10,6) .而到c#里对应的数据类型就是decimal ,但是使用EF6.0的crea ...
随机推荐
- 转:Android JNI
http://blog.csdn.net/zeng622peng/article/details/6675230 Java Native Interface (JNI)标准是java平台的一部分,它允 ...
- 转:builder模式分析
建造者模式 11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制 作了,不 ...
- SWPUCTF_2019_p1KkHeap(tcache_entry)
花了半天的时间去理解吃透这道题目,也参考了大佬的wp (1条消息) [pwn]SWPUCTF_2019_p1KkHeap_Nothing-CSDN博客. (1条消息) swpuctf2019 p1Kk ...
- 扬我国威,来自清华的开源项目火爆Github
前几天TJ君跟大家分享了几个有趣的Github项目(加密解密.食谱.新冠序列,各种有趣的开源项目Github上都有),其中呢,有不少是来自斯坦福大学的项目,当时TJ君就不由得想,什么时候能看到的项目都 ...
- Table.AlternateRows删除间隔….Alternate…(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- LuoguP7080 [NWRRC2013]Ballot Analyzing Device 题解
Content 有 \(n\) 名选手参加一个比赛,有 \(m\) 个人为他们投票.第 \(i\) 个人的投票情况用一个长度为 \(n\),并且仅包含 . 和 X 两个字符的字符串,其中,如果第 \( ...
- Java面向对象~类和对象&方法,类方法
面向对象 概念: 1.同一类事物的抽象描述,不是具体的 2.类和对象的关系: 类 是抽象的. 对象 是具体的. 3.对象的体征,称为"属性&q ...
- 用jQuery实现数字滚动效果
html 部分 <div class="js-box box"></div> css 部分 .statistic .box{ display: inline ...
- RPA项目POC指南:概念、步骤与技巧
"为什么部署RPA前要进行POC?RPA不是开箱即用吗?" 其实,RPA的实施并非总是一帆风顺,"碰坑"在所难免. 据安永报告显示,30%至50%的初始RPA项 ...
- ubuntu查系统信息及系统服务
系统信息 uname -a # 查看内核/操作系统/CPU信息 cat /etc/issue # 查看操作系统版本 cat /proc/version ...