搞懂Flink-FlinkSql

搞懂Flink-FlinkSql,第1张

搞懂Flink-FlinkSql  前言:

    sql作为一个高级的数据处理语言,在做数据开发和数仓分析师等岗位是必不可少的一项技能,本人一开始从事数据开发偏工程的职位,随着工作需要逐渐学习sql,sql的学习入门和使用其实相对不是很难,实际生产中要深刻的理解业务并且通过sql产出结果数据是相对的比较难,所以这篇博客的意义在于使大家在使用sql的同时可以了解flink sql的原理。

sql最为flink系统的最高等级语言

Flink批流一体的时间节点 

在发布1.9.0版本的时候,阿里开源的blink planner 代替了flink原始的planner成为了默认的planner模块,从此版本正式以流代码为核心,重新设计算子真正意义实现了批流一体

Flink使用的sql解析器:calcite(和hive是一样的)

calcite 不存储的元数据和基本数据,只提供sql解析功能

Calcite 主要的功能

1,sql解析(Parser)

通过Java CC实现的,(通过一个配置文件可以根据语法和词法解析成可以执行的java程序代码)

经过javaCC把sql转换成可以执行的AST抽象语法树

2,sql校验(Validato)

把解析好的sql进行是否可执行的校验 *** 作

1)语法的校验,看sql是否符合语法规范

2)词法的校验,校验sql中的schema,filed,Function等是否存在,返回的类型是否匹配

3,sql优化查询

对校验完的输出(relNode)进行优化,等到一个物理执行计划

1)基于规则的优化

2)基于代价的优化

4,sql的生成

5,数据的连接和执行

优化的规则:

Table_subquery_rules 子查询优化 Expand_plan_rules :扩展计划优化 Post_expand_clean_up_rules :扩展计划优化 Datastream_norm_rules :正常化流处理 Logical_Opt_Rules :逻辑计划优化 DataStream_Opt_Rules :流式计算优化

DataStream_Deco_Rules:装饰流式计算优化

Flink Hive 介绍

flink1.11版本对hive支持做了重大改变

 Flink 和hive集成做了那些 *** 作

1,因为支持hive方言(在flink里可以写hive的语法),所以先做hive dialect

2,把hive根据flinksql模块进行解析校验生成逻辑执行计划,物理执行计划最终变成jobGraph

3,HiveCatalog的作用是把flink的元数据持久化到hive metaStore里面

 核心类HiveCatalog(主要作用是持久元数据)

FlinkSql 1.11 新增实时数仓(实时kafka->hive 有些公司已经在使用了)

对 FileSystemStreaming Sink重新修改

增加了分区提交和滚动策略

写流程:

1,StreamingWriter

创建kafka的source源,通过executesql()

2,创建hive的sink源

3,再通过insert去插入

读流程:

实时写入分区数据可见性的问题 

靠的是触发机制,包含process-time和partition-time延时

partition-time:  watermark>partition-time+delay    触发提交

process-time: currentprocess time > partitiontime creation time + delay  触发提交

process-time有缺陷,失败重启不会回到正确分区,所以一般用 partition-time

具体表现:hive目录.开头是不可见的,把.去掉就可见了

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5676726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存