加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

如何变成程序运行的

发布时间:2021-04-11 15:39:13 所属栏目:外闻 来源:互联网
导读:DataStream Api / Process Function 更加面向的是开发者,想要开发出合理的 Flink 程序,至少需要具备以下技能: 具有 Java 、Scala 开发经验; 需要对 Time、State 以及 Window 等流式概念有非常深入的了解; 具有分布式处理的经验和知识; 具有作业调优的经验

DataStream Api / Process Function 更加面向的是开发者,想要开发出合理的 Flink 程序,至少需要具备以下技能:

  • 具有 Java 、Scala 开发经验;
  • 需要对 Time、State 以及 Window 等流式概念有非常深入的了解;
  • 具有分布式处理的经验和知识;
  • 具有作业调优的经验;

这样的话,对数据分析人员和业务人员很不友好,使用起来学习成本非常高,望尘莫及。

并且开发起来非常繁琐,开发应用需要使用 Function 接口,即使是一个简单的过滤也要实现一个 FilterFunction 匿名类,而使用 Table Api 则简单很多。

2. 代码不通用

Table Api 和 SQL 是流批通用的,代码完全可以复用。不必流式程序使用 DataStream Api,批处理使用 DataSet Api (注:社区未来可能会废弃 Dataset Api,统一使用 DataStream Api 来开发批流程序)。

3. 框架很难优化

在使用 DataStream Api 和 DataSet Api 开发应用的时候,Flink 框架只能进行非常有限的优化,需要开发者非常谨慎的编写高效的应用程序。

而使用 Table Api 或 SQL,则可以使用 Calcite 的 SQL 优化器,更容易写出执行效率高的应用。

二、Table Api / SQL 是如何转换为程序运行的?验,SQL 查询优化,SQL 生成以及数据连接查询等,但是并不存储元数据和基本数据,不包含处理数据的算法。

由于舍弃了这些功能,Calcite 可以在应用和数据存储,数据处理引擎之间很好的扮演中介的角色。

它不受上层编程语言的限制,前端可以使用 SQL、Pig、Cascading 等语言,只要通过 Calcite 提供的 SQL Api 将它们转化成关系代数的抽象语法树即可,并根据一定的规则和成本对抽象语法树进行优化,最后推给各个数据处理引擎来执行。

所以 Calcite 不涉及物理规划层,它通过扩展适配器来连接多种后端的数据源和数据处理引擎,如 Hive,Drill,Flink,Phoenix。

2. SQL 语句到 Operation 过程

首先使用 Calcite 对 SQL 语句进行解析,获取 SQL Node,再根据不同的 SQL 类型分别进行转换,校验语法的合法性,再根据语句类型(DQL、DML、DDL)转换成对应的算子树。

对于 SQL 查询语句而言,会转换为 QueryOperation 树。

3. Operation 到 Transformation 过程

首先 Operation 先转换为 Calcite 的逻辑计划树,再对应地转换为 Flink 的逻辑计划树,然后进行优化。

优化后的逻辑树转换为 Flink 的物理计划,然后物理计划通过代码生成算子、UDF、表达式等代码,包装到 Transformation 中,形成 Transformation 流水线,再转换为 StreamGraph ,最终就可以提交到 Flink 集群真正运行起来了。

(后面会专门写源码分析的文章,来重点讲述这两部分的内容,持续关注我)

4. 元数据

元数据是是 Flink SQL 处理数据非常重要的一个部分,元数据描述了 Flink 处理的读取和写出的数据的结构以及数据的访问方法等信息,没有元数据,Flink 就无法对 SQL 进行校验和优化了。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读