- 博客(1198)
- 资源 (79)
- 收藏
- 关注

原创 大数据Doris(二):Doris原理篇
在SQL优化器中最重要的一个组件是查询优化器(Query Optimization),在海量数据分析中一条SQL生成的执行计划搜索空间非常庞大,查询优化器的目的就是对执行计划空间进行裁剪减少搜索空间的代价,查询优化器对于SQL的执行来说非常重要,不管是关系型数据库系统Oracle、MySQL还是大数据领域中的Hive、SparkSQL、Flink SQL都会有一个查询优化器进行SQL执行计划优化。从寄存器中访问数据的速度,是从内存访问数据速度的300倍,是从磁盘中访问数据速度的30万倍。
2023-09-29 18:21:50
101

原创 大数据学习指南从入门到精通
利用框架的力量,看懂游戏规则,才是入行的前提大多数人不懂,不会,不做,才是你的机会,你得行动,不能畏首畏尾选择才是拉差距关键,风向,比你流的汗水重要一万倍,逆风划船要累死人的为什么选择学习大数据开发,不选择Java开发?借棋弈做比喻,智商高的不要选择五子琪,要选择围棋,它能长久地吸引你。不都是在棋盘上一颗黑子一颗白子地下吗?因为围棋更复杂,能够掌握如此复杂的技艺、产生稳定输出的棋手、让我们更佩服。选择学习大数据开发也如此,能让你的职业生涯走得更远,少走弯路。
2022-05-21 15:57:40
16965
183
原创 大数据Flink(九十四):DML:TopN 子句
TopN 其实就是对应到离线数仓中的 row_number(),可以使用 row_number() 对某一个分组的数据进行排序。
2023-10-02 06:30:00
224
原创 大数据Flink(九十三):DML:Order By、Limit 子句
实时任务中,Order By 子句中必须要有时间属性字段,并且时间属性必须为升序时间属性,即 WATERMARK FOR rowtime_column AS rowtime_column - INTERVAL '0.001' SECOND 或者。,但在实时任务中一般用的非常少。
2023-10-01 06:00:00
147
原创 大数据Doris(三):Doris编译部署篇
这个是官方文档推荐的,可以非常方便顺利的编译源码,如果需要快速部署的,可以使用这种方式。这种方式的优点就是不用配置环境变量,也不用考虑各种版本问题,进入开发镜像系统后直接下载 doris 源码编译即可。将容器中的 maven 下载的包保存到宿主机本地指定的文件中,避免重复下载,同时会将编译的 Doris 文件保存到宿主机本地指定的文件,方便部署。拉取Doris官方提供的Docker镜像,目前可用版本有:build-env、build-env-1.1、build-env-1.2。也可以自行编译压缩包后使用(
2023-09-30 15:24:05
129
原创 大数据Flink(九十二):DML:集合操作
上述 SQL 在流式任务中,如果一条左流数据先来了,没有从右流集合数据中找到对应的数据时会直接输出,当右流对应数据后续来了之后,会下发回撤流将之前的数据給撤回。上述 SQL 的 In 子句其实就和之前介绍到的 Inner Join 类似。并且 In 子查询也会涉及到大状态问题,大家注意设置 State 的 TTL。
2023-09-30 07:30:00
95
原创 大数据Flink(九十一):Array Expansion(数组列转行)和Table Function(自定义列转行)
:这个其实和 Array Expansion 功能类似,但是 Table Function 本质上是个 UDTF 函数,和离线 Hive SQL 一样,我们可以自定义 UDTF 去决定列转行的逻辑。:比如某些场景下,日志是合并、攒批上报的,就可以使用这种方式将一个 Array 转为多行。:将表中 ARRAY 类型字段(列)拍平,转为多行。SQL 表值函数(Table Function)
2023-09-27 08:00:00
77
原创 大数据Flink(九十):Lookup Join(维表 Join)
Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。
2023-09-26 22:09:41
333
原创 大数据Flink(八十九):Temporal Join(快照 Join)
比如常见的汇率数据(实时的根据汇率计算总金额),在 12:00 之前(事件时间),人民币和美元汇率是 7:1,在 12:00 之后变为 6:1,那么在 12:00 之前数据就要按照 7:1 进行计算,12:00 之后就要按照 6:1 计算。在事件时间语义的任务中,事件时间 12:00 之前的数据,要按照 7:1 进行计算,12:00 之后的数据,要按照 6:1 进行计算。事件时间的 Temporal Join 一定要把 Versioned Table 的主键包含在 Join on 的条件中。
2023-09-26 00:25:53
566
1
原创 大数据Flink(八十八):Interval Join(时间区间 Join)
刚刚的案例也讲了,Regular Join 会产生回撤流,但是在实时数仓中一般写入的 sink 都是类似于 Kafka 这样的消息队列,然后后面接 clickhouse 等引擎,这些引擎又不具备处理回撤流的能力。可以发现 Inner Interval Join 和其他三种 Outer Interval Join 的区别在于,Outer 在随着时间推移的过程中,如果有数据过期了之后,会根据是否是 Outer 将没有 Join 到的数据也给输出。:Interval Join 在离线的概念中是没有的。
2023-09-24 23:57:32
303
1
原创 大数据Flink(八十七):DML:Joins之Regular Join
流的上游是无限的数据,所以要做到关联的话,Flink 会将两条流的所有数据都存储在 State 中,所以 Flink 任务的 State 会无限增大,因此你需要为 State 配置合适的 TTL,以防止 State 过大。:Join 其实在我们的数仓建设过程中应用是非常广泛的。:Regular Join 其实就是和离线 Hive SQL 一样的 Regular Join,通过条件关联两条流数据输出。Join 的流程是左流新来一条数据之后,会和右流中符合条件的所有数据做 Join,然后输出。
2023-09-23 09:26:09
154
1
原创 大数据Flink(八十六):DML:Group 聚合和Over 聚合
而 Group by 聚合是没有时间语义的,不管数据迟到多长时间,只要数据来了,就把上一次的输出的结果数据撤回,然后把计算好的新的结果数据发出。而窗口聚合是在时间粒度上对数据进行分组,是纵向的。Group by 聚合涉及到了回撤流(也叫 retract 流),会产生回撤流是因为从整个 SQL 的语义来看,上游的 Kafka 数据是源源不断的,无穷无尽的,那么每次这个 SQL 任务产出的结果都是一个中间结果,所以每次结果发生更新时,都需要将上一次发出的中间结果给撤回,然后将最新的结果发下去。
2023-09-23 09:00:32
152
1
原创 大数据Flink(八十五):Window TVF 支持多维数据分析
这时,有离线 Hive SQL 使用经验的就会想到,如果有了 Grouping Sets,我们就可以直接用 Grouping Sets 将维度组合写在一条 SQL 中,写起来方便并且执行效率也高。对于经常需要对数据进行多维度的聚合分析的场景,您既需要对a列做聚合,也要对b列做聚合,同时要按照a、b两列同时做聚合,因此需要多次使用UNION ALL。CUBE会枚举指定列的所有可能组合作为GROUPING SETS,而ROLLUP会以按层级聚合的方式产生GROUPING SETS。也可以用于非窗口函数的场景。
2023-09-21 23:51:43
308
原创 大数据Flink(八十四):SQL语法的DML:窗口聚合
由于窗口涉及到的知识内容比较多,先为大家说明介绍下面内容时的思路,大家跟着思路走。首先来看看 Flink SQL 中支持的 4 种窗口的运算。
2023-09-20 21:40:45
372
3
原创 大数据Flink(八十三):SQL语法的DML:With、SELECT & WHERE、SELECT DISTINCT 子句
但是这可能会影响查询结果的正确性,比如某个 key 的数据过期从状态中删除了,那么下次再来这么一个 key,由于在状态中找不到,就又会输出一遍。可以看到这个实时任务的所有算子是以一种 pipeline 模式运行的,所有的算子在同一时刻都是处于 running 状态的,24 小时一直在运行,实时任务中也没有离线中常见的分区概念。可以看到离线任务的算子是分阶段(stage)进行运行的,每一个 stage 运行结束之后,然后下一个 stage 开始运行,全部的 stage 运行完成之后,这个离线任务就跑结束了。
2023-09-19 00:00:20
561
1
原创 大数据Flink(八十二):SQL语法的DDL:Create 子句
例如,我们可以使用元数据列从 Kafka 数据中读取 Kafka 数据自带的时间戳(这个时间戳不是数据中的某个时间戳字段,而是数据写入 Kafka 时,Kafka 引擎给这条数据打上的时间戳标记),然后我们可以在 Flink SQL 中使用这个时间戳,比如进行基于时间的窗口操作。如果只是简单的四则运算的话直接写在 DML 中就可以,但是计算列一般是用于定义时间属性的(因为在 SQL 任务中时间属性只能在 DDL 中定义,不能在 DML 语句中定义)。这些列本身是没有以物理形式存储到数据源中的。
2023-09-17 08:54:45
250
1
原创 大数据Flink(八十一):SQL 时区问题
在北京时区的用户使用 TIMESTAMP(3) 类型的时间列开最常用的 1 天的窗口时,划分出来的窗口范围是北京时间的 [2022-01-01 08:00:00, 2022-01-02 08:00:00],而不是北京时间的 [2022-01-01 00:00:00, 2022-01-02 00:00:00]。通过上述结果可见,使用处理时间进行开窗,在 UTC 时区下的计算结果与在 Asia/Shanghai 时区下计算的窗口开始时间,窗口结束时间和窗口的时间是不同的,都是按照时区进行格式化的。
2023-09-16 10:19:47
586
1
原创 大数据Flink(八十):Checkpoint的状态后端和重启策略
MemoryStateBackend内部将状态(state)数据作为对象保存在java堆内存中(taskManager),通过checkpoint机制,MemoryStateBackend将状态(state)进⾏快照并保存Jobmanager(master)的堆内存中。如果某个算子在节点A上失败,在节点B上恢复,使用本地文件时,在B上无法读取节点 A上的数据,导致状态恢复失败。您可以选择将状态保留在 JVM 堆上,或者如果它太大,则保留在有效组织的磁盘数据结构中,这取决于状态后端的配置。
2023-09-14 06:00:00
193
1
原创 大数据Flink(七十九):SQL 的容错(Checkpoint)
Checkpoint 保存数默认是 1,也就是只保存最新的 Checkpoint 的 State 文件,当进行 State 恢复时,如果最新的 Checkpoint 文件不可用时 (比如文件损坏或者其他原因),那么 State 恢复就会失败,如果设置 Checkpoint 保存数 3,即使最新的 Checkpoint 恢复失败,那么 Flink 也会回滚到上一次 Checkpoint 的状态文件进行恢复。一般来说,Checkpoint 时间间隔越长,需要生产的 State 就越大。
2023-09-13 19:00:00
111
1
原创 大数据Flink(七十八):SQL 的水印操作(Watermark)
4.后面几个以此类推,直到Event Time为:1648197590000的数据进来的时候,前一条数据的WaterMark为1648197589000,于是更新当前的WaterMark为1648197590000,Flink认为1648197590000之前的数据都已经到达,且达到了窗口的触发条件,开始进行计算。可以看到,设置了最大允许乱序时间后,WaterMark要比原来低5秒,可以对延迟5秒内的数据进行处理,窗口的触发条件也同样会往后延迟关于延迟时间,请结合业务场景进行设置。
2023-09-12 23:02:32
513
1
原创 大数据Flink(七十七):SQL窗口的Over Windows
按照时间区间聚合就是时间区间的一个滑动窗口,比如下面案例 1 小时的区间,最新输出的一条数据的 sum 聚合结果就是最近一小时数据的 amount 之和。按照行数聚合就是数据行数的一个滑动窗口,比如下面案例,最新输出的一条数据的 sum 聚合结果就是最近 5 行数据的 amount 之和。在 Hive 中也有相同的聚合,但是可以想想你在离线数仓经常使用嘛?:可以理解为是一种特殊的滑动窗口聚合函数。:计算最近一段滑动窗口的聚合结果数据。那这里我们拿 Over 聚合 与。
2023-09-11 23:39:37
259
3
原创 大数据Flink(七十六):SQL的渐进式窗口(CUMULATE)
这类指标是一段周期内的累计状态,对分析师来说更具统计分析价值,而且几乎所有的复合指标都是基于此类指标的统计(不然离线为啥都要累计一天的数据,而不要一分钟累计的数据呢)。渐进式窗口可以认为是首先开一个最大窗口大小的滚动窗口,然后根据用户设置的触发的时间间隔将这个滚动窗口拆分为多个窗口,这些窗口具有相同的窗口起点和不同的窗口终点。例如,从每日零点到当前这一分钟绘制累积 UV,其中 10:00 时的 UV 表示从 00:00 到 10:00 的 UV 总数。:渐进式窗口语义和滚动窗口类似,这里不再赘述。
2023-09-10 15:22:30
396
4
原创 大数据Flink(七十五):SQL的Session 窗口(SESSION)
可以看到 Group Window Aggregation 中 Session 窗口的写法就是把 session window 的声明写在了 group by 子句中,即 session(row_time, interval '5' minute)。Session 时间窗口和滚动、滑动窗口不一样,其没有固定的持续时间,如果在定义的间隔期(Session Gap)内没有新的数据出现,则 Session 就会窗口关闭。:Session 窗口语义和滚动窗口类似,这里不再赘述。第一个参数为事件时间的时间戳;
2023-09-08 11:42:35
201
2
原创 大数据Flink(七十四):SQL的滑动窗口(HOP)
与滚动窗口功能一样,也有窗口大小的概念。不一样的地方在于,滑动窗口有另一个参数控制窗口计算的频率(滑动窗口滑动的步长)。因此,如果滑动的步长小于窗口大小,则滑动窗口之间每个窗口是可以重叠。这样,每 5 分钟会划分一次窗口,这个窗口包含的数据是过去 10 分钟内的数据,如下图所示。:比如计算同时在线的数据,要求结果的输出频率是 1 分钟一次,每次计算的数据是过去 5 分钟的数据(有的场景下用户可能在线,但是可能会 2 分钟不活跃,但是这也要算在同时在线数据中,所以取最近 5 分钟的数据就能计算进去了)
2023-09-06 23:40:27
865
1
原创 大数据Flink(七十三):SQL的滚动窗口(TUMBLE)
(TUMBLE 算子):接收到上游算子发的一条一条的数据,然后将每一条数据按照时间戳划分到对应的窗口中(根据事件时间、处理时间的不同语义进行划分),上述案例为事件时间,事件时间中,滚动窗口算子接收到上游的 Watermark 大于窗口的结束时间时,则说明当前这一分钟的滚动窗口已经结束了,将窗口计算完的结果发往下游算子(一条一条发给下游。数据源算子(From Order):连接到 Kafka topic,数据源算子一直运行,实时的从 Order Kafka 中一条一条的读取数据,然后一条一条发送给下游的。
2023-09-05 23:06:28
727
2
原创 大数据Flink(七十二):SQL窗口的概述和Over Windows
当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。按照时间区间聚合就是时间区间的一个滑动窗口,比如下面案例 1 小时的区间,最新输出的一条数据的 sum 聚合结果就是最近一小时数据的 amount 之和。按照行数聚合就是数据行数的一个滑动窗口,比如下面案例,最新输出的一条数据的 sum 聚合结果就是最近 5 行数据的 amount 之和。
2023-09-04 06:30:00
478
1
原创 大数据Flink(七十一):SQL的时间属性
以事件时间举个例子,如果只是数据携带了时间,Flink 也消费了这个数据,但是在 Flink 中没有使用数据的这个时间作为计算的触发条件,也不能把这个 Flink 任务叫做事件时间的任务。:举个例子,比如用户可以自定义每隔 10s 的本地时间,或者消费到的数据的时间戳每增大 10s,就把计算结果输出一次,时间在此类应用中也是一种标识任务进度的作用。事件时间:指的是数据本身携带的时间,这个时间是在事件产生时的时间,而且在 Flink SQL 触发计算时,也使用数据本身携带的时间。三种时间属性的应用场景是啥?
2023-09-03 10:01:50
1002
1
原创 大数据Flink(七十):SQL 动态表 & 连续查询
可以理解为虽然 group by user, tumble(xxx) 上游也是一个源源不断的数据,但是这个查询本质上是对时间上的划分,而时间都是越变越大的,当前这个滚动窗口结束之后,后面来的数据的时间都会比这个滚动窗口的结束时间大,都归属于之后的窗口了,当前这个滚动窗口的结果数据就不会再改变了,因此这条查询只有 INSERT 数据,即一个 Append 查询。连续查询(Continuous Query) 的产出的结果 = 批处理模式在输入表的上执行的相同查询的结果。查询每小时持续计算结果并更新结果表。
2023-08-31 23:31:53
1104
2
原创 大数据Flink(六十九):SQL 数据类型
DECIMAL、DECIMAL(p)、DECIMAL(p, s)、DEC、DEC(p)、DEC(p, s)、NUMERIC、NUMERIC(p)、NUMERIC(p, s):固定长度和精度的数值类型,就和 Java 中的 BigDecimal 一样,p 代表数值位数(长度),取值范围 [1, 38];BIGINT:-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 的 8 字节大小的有符号整数,就和 Java 中的 long 一样。
2023-08-29 06:30:00
270
3
原创 大数据Flink(六十八):SQL & Table 的基本概念及常用 API
Table 对象不会真的产生一个中间表供下游多个查询去引用,即多个查询不共享这个 Table 的结果,可以理解为是一种中间表的简化写法,不会先产出一个中间表结果,然后将这个结果在下游多个查询中复用,后续的多个查询会将这个 Table 的逻辑执行多次。对比到离线的 Hive SQL 中,在离线的场景(Hive 表)中 VIEW 也都是从已有的表中去创建的。那么在这个 Flink session 中,你的任务访问到这个表时,访问到的永远是临时表(即相同名称的表,临时表会屏蔽永久表)。
2023-08-27 07:33:48
443
2
原创 大数据Flink(六十七):SQL & Table 简介及运行环境
Table API 和 SQL API 也与 DataStream API 做到了无缝集成。例如,可以使用 SQL 的 MATCH_RECOGNIZE 子句匹配出异常的数据,然后使用再转为 DataStream API 去灵活的构建针对于异常数据的自定义报警机制。这就是说为什么 Flink SQL 和 Table API 可以做到在用户接口层面的流批统一。无论输入是连续(流处理)还是有界(批处理),在 Table 和 SQL 任一 API 中同一条查询语句是具有相同的语义并且会产出相同的结果的。
2023-08-26 07:16:33
443
2
原创 大数据Flink(六十六):Flink的重要概念和小结
每一个算子的子任务,会根据数据传输的策略,把数据发送到不同的下游目标任务。如果大家见过传说中的“卡带式游戏机”,就会对它有更直观的认识:游戏机上的卡槽提供了可以运行游戏的接口和资源,我们把游戏卡带插入卡槽,就可以占用游戏机的计算资源,执行卡带中的游戏程序了。比图中的 map 和后面的 keyBy/window 算子之间(这里的 keyBy 是数据传输算子,后面的 window、apply 方法共同构成了 window 算子),以及 keyBy/window 算子和 Sink 算子之间,都是这样的关系。
2023-08-23 21:53:35
717
4
原创 大数据Flink(六十五):Flink作业提交流程
比如我们在上一章实践过的独立集群环境的会话模式,就是需要先启动集群,如果资源不够,只能等待资源释放,而不会直接启动新的 TaskManager。在独立模式(Standalone)下, TaskManager 都需要手动启动,所以当 ResourceManager 收到 JobMaster 的请求时,会直接要求 TaskManager 提供资源。(1)客户端将作业提交给 YARN 的资源管理器,这一步中会同时将 Flink 的 Jar 包和配置上传到 HDFS,以便后续启动 Flink 相关组件的容器。
2023-08-21 06:30:00
201
1
原创 大数据Flink(六十四):Flink运行时架构介绍
TaskManager 启动之后,JobManager 会与它建立连接,并将作业图(JobGraph)转换成可执行的“执行图”(ExecutionGraph)分发给可用的 TaskManager,然后就由 TaskManager 具体执行任务。从以 Greenplum 为代表的 MPP(Massively Parallel Processing,大规模并行处理)架构,到 Hadoop、Spark 为代表的批处理架构,再到 Storm、Flink 为代表的流处理架构,都是以分布式作为系统架构的基本形态的。
2023-08-19 09:27:10
1237
3
原创 大数据Flink(六十三):SqlClient工具的使用
Flink 的 Table & SQL API 可以处理 SQL 语言编写的查询语句,但是这些查询需要嵌入用 Java 或 Scala 或者Python 编写的表程序中。注意当你使用这个模式运行一个流式查询的时候,Flink 会将结果持续的打印在当前的屏幕之上。如果这个流式查询的输入是有限的数据集, 那么Flink在处理完所有的数据之后,会自动的停止作业,同时屏幕上的打印也会相应的停止。这些模式的结果都存储在 SQL 客户端 的 Java 堆内存中。按键,这个会停掉作业同时停止屏幕上的打印。
2023-08-15 06:30:00
606
1
原创 大数据Flink(六十二):批处理的入门案例
I,-U,+U 表示一行数据的 changelog,+I 表示是新增的数据,-U 表示之前的记录已经被更新,之前的记录要回撤,+U 表示本次更新的数据。可以看到,输出结果是以对于每行产生 changelog 的形式来表示的。并根据表中的字段信息进行统计每个单词出现的数量。编写Flink程序,读取。
2023-08-14 07:00:00
287
1
原创 大数据Flink(六十一):Flink流处理程序流程和项目准备
下进行安装,这时候我们自动就是启动的PlaygroundEnv环境,在安装的过程中你也可以看到。我们可以手工安装PyFlink,直接在PyCharm的。有了这些信息我们就可以进行PyFlink的作业开发了。本地环境安装的Python3.8版本。先利用PyCharm创建项目,名为。创建之后,我们会看到。最终完成之后你可以在。
2023-08-12 09:07:10
874
2
原创 大数据Flink(六十):Flink 数据流和分层 API介绍
因此,Flink 是一个用于在无界和有界数据流上进行有状态计算的通用的处理框架,它既具有处理无界流的复杂功能,也具有专门的运算符来高效地处理有界流。由 Flink 应用程序产生的结果流可以发送到各种各样的系统,并且可以通过 REST API 访问 Flink 中包含的状态。在 Flink 中,认为所有的数据本质上都是随时间产生的流数据,把批数据看作是流数据的特例,只不过流数据是一个无界的数据流,而批数据是一个有界的数据流(例如固定大小的数据集)。Flink 提供了三个分层的 API。
2023-08-11 22:47:47
1072
5
原创 大数据Flink(五十九):Flink on Yarn的三种部署方式介绍以及注意
如果使用的是flink on yarn方式,想切换回standalone模式的话,需要删除文件:【/tmp/.yarn-properties-root】到这里,我们以 Pre-Job 的方式成功部署了 PyFlink 的作业!但是会话模式的话,如果是kill掉任务,其不会执行自动删除这个文件的步骤,所以需要我们手动删除这个文件。因为默认查找当前yarn集群中已有的yarn-session信息中的jobmanager。如果是分离模式运行的YARN JOB后,其运行完成会自动删除这个文件。
2023-08-09 23:26:32
873
2
NiFi文档资料与软件包下载
2023-02-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人