自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 详解 Flink Table API 和 Flink SQL 之函数

UDF 显著地扩展了查询的表达能力,可以解决一些系统内置函数无法解决的需求。使用步骤为:自定义 UDF 函数类继承 UserDefinedFunction 抽象类;创建 UDF 实例并在环境中调用 registerFunction() 方法注册;在 Table API 或 SQL 中使用。

2024-06-13 18:41:18 336

原创 详解 Flink Table API 和 Flink SQL 之窗口操作

时间语义,要配合窗口操作才能发挥作用。

2024-06-13 12:20:53 81

原创 详解 Flink Table API 和 Flink SQL 之时间特性

Table API 和 SQL 进行基于时间的操作(比如时间窗口)时需要定义相关的时间语义和时间数据来源的信息。因此会给表单独提供一个逻辑上的时间字段,专门用来在表处理程序中指示时间时间属性(time attributes),其实就是每个表模式结构(schema)的一部分。它可以在创建表的 DDL 里直接定义为一个字段,也可以在 DataStream 转换成表时定义。一旦定义了时间属性,就可以作为一个普通字段引用,并且可以在基于时间的操作中使用。

2024-06-12 18:41:44 141

原创 详解 Flink Table API 和 Flink SQL 之流处理中的表

动态表可以像静态的批处理表一样进行查询操作。由于数据在不断变化,因此基于它定义的 SQL 查询也不可能执行一次就得到最终结果,所以对动态表的查询就永远不会停止,一直在随着新数据的到来而继续执行。这样的查询就被称作“持续查询”(Continuous Query)对动态表进行持续查询(continuous query),生成新的动态表。流(stream)被转换为动态表(dynamic table)生成的动态表被转换成流。

2024-06-12 12:25:48 248

原创 详解 Flink Table API 和 Flink SQL 之表和 DataStream 的转换

【代码】详解 Flink Table API 和 Flink SQL 之表和 DataStream 的转换。

2024-06-11 19:01:56 164

原创 详解 Flink Table API 和 Flink SQL 之表操作

表的输出是通过将数据写入到 TableSink 来实现的。TableSink 是 Table API 中提供的一个向外部系统写入数据的通用接口,可以支持不同的文件格式(比如 CSV、Parquet)、存储数据库(比如 JDBC、HBase、Elasticsearch)和消息队列(比如 Kafka)对于流式查询(Streaming Queries),需要声明如何在(动态)表和外部连接器之间执行转换。与外部系统交换的消息类型,由更新模式(update mode)指定。引入 flink-json 依赖。

2024-06-11 12:25:37 690

原创 详解 Flink Table API 和 Flink SQL 之入门介绍

Flink 提供了对于“表”处理的支持,这就是更高层级的应用 API,在 Flink 中被称为 Table API 和 SQLTable API 是基于“表”(Table)的一套 API,它是内嵌在 Java、Scala 等语言中的一种声明式领域特定语言(DSL),也就是专门为处理表而设计的Flink SQL 是基于 Apache Calcite 实现了对 SQL 的支持。

2024-06-10 19:54:23 332

原创 详解 Flink 的容错机制

有状态流应用中的检查点(checkpoint),其实就是所有任务的状态在某个时间点的一个快照(一份拷贝),这个时间点应该是所有任务都恰好处理完一个相同的输入数据的时刻。在一个流应用程序运行时, Flink 会定期保存检查点,在检查点中会记录每个算子的 id 和状态;如果发生故障,Flink 就会用最近一次成功保存的检查点来恢复应用的状态,重新启动处理流程,就如同“读档”一样。检查点是 Flink 容错机制的核心。

2024-06-10 10:43:23 821 1

原创 详解 Flink 的状态管理

无状态的流处理:根据每一次当前输入的数据直接转换输出结果的过程,在处理中只需要观察每个输入的独立事件。例如, 将一个字符串类型的数据拆分开作为元组输出或将每个输入的数值加 1 后输出。Flink 中的基本转换算子 (map、filter、flatMap 等) 在计算时不依赖其他数据,所以都属于无状态的算子。有状态的流处理:根据每一次当前输入的数据和一些其他已处理的数据共同转换输出结果的过程,这些其他已处理的数据就称之为状态(state),状态由任务维护,可以被任务的业务逻辑访问。

2024-06-09 19:39:29 830

原创 详解 Flink 的 ProcessFunction API

相较于 map、filter 和 window 等特定的具体的操作而言,Flink 在底层 API 中提炼出一个统一通用的 process 操作,它是所有转换算子的一个概括性的表达,可以在对应的接口中自定义处理逻辑,而这一层接口就被叫作“处理函数”(ProcessFunction)

2024-06-09 16:58:43 913 1

原创 详解 Flink 的时间语义和 watermark

Watermark 是一种使用延迟触发 window 执行来处理乱序数据的机制原理:当设置 Watermark = t 时 (即延迟时长为 t),则 Flink 每一次都会获取已经到达的数据中的最大的 EventTime,然后判断 maxEventTime - t 是否等于某一个窗口的触发时间,如果相等则认为属于这个窗口的所有数据都已经到达,这个窗口被触发执行关闭,也可能存在数据丢失。

2024-06-08 17:21:01 950

原创 详解 Flink 的 window API

​ Streaming 流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集是指一种不断增长的本质上无限的数据集,而 Flink window 是一种将无限数据切割为有限块进行处理的手段。window 是无限数据流处理的核心, window 将一个无限的 stream 拆分成有限大小的 ”buckets” 桶,然后可以在这些桶上做计算操作。

2024-06-08 13:00:45 974

原创 详解 Flink 流处理 API

常用于模拟数据源进行测试//创建执行环境//自定义source的并行度必须设置为 1//使用通用 addSource 方法和自定义 SourceFunction 获取数据//输出//执行//自定义类实现 SourceFunction 接口并重写方法//数据获取逻辑:周期性循环获取10个传感器变化后的温度值//SourceFunction的并行度必须为 1,ParallelSourceFunction 接口可以多并行//Source程序执行,调用该方法获取数据。

2024-06-07 12:40:09 1138

原创 详解 Flink 的运行架构

算子链 (Operator Chain):并行度相同、同一个 slot 共享组且数据传输方式为 one-to-one 的算子们可以合并成为一个算子链,形成一个 Task 由一个线程执行。Task Slot:在 TaskManager 上拥有计算资源的一个固定大小的子集,一个 TaskManager 上的所有 Task Slot 会均分整个内存,所以任务之间不受影响。并行子任务 (Subtask):一个算子操作可以 “复制” 成多份分布到不同的节点去运行,每个节点所运行的任务称为该算子的一个并行子任务。

2024-06-06 18:32:33 982

原创 详解 Flink 的常见部署方式

Yarn 模式是指客户端把 Flink 应用提交给 Yarn 的 ResourceManager, Yarn 的 ResourceManager 会在 Yarn 的 NodeManager 上创建容器。YARN 的高可用是只启动一个 Jobmanager, 当这个 Jobmanager 挂了之后, YARN 会再次启动一个, 本质是利用的 YARN 的重试次数来实现的高可用。将编码好的 Flink maven 工程打成 jar 包,并将 jar 包上传到 flink 安装目录下的 lib 目录。

2024-06-06 12:54:55 1032

原创 Flink 入门案例介绍

在 IDEA 中创建一个 Maven 工程:FlinkTutorial。

2024-06-05 20:45:21 287

原创 详解 Spark Streaming 的 DStream 对象

通过继承 Receiver 抽象类,并实现 onStart、onStop 方法来自定义数据源采集/**实现步骤:1.继承 Receiver[T]() 抽象类,定义泛型,并传递参数1.1 泛型是采集的数据类型1.2 传递的参数是存储级别,StorageLevel 中的枚举值2.实现 onStart、onStop 方法3.使用 receiverStream(receiver) 创建 DStream*/// 使用自定义数据源采集数据ds.print()// 自定义数据源采集。

2024-06-05 12:33:17 836 1

原创 Spark Streaming 概述及入门案例

从数据处理的方式:流式数据处理(Streaming)批量数据处理(Batch)从数据处理的延迟:实时数据处理(毫秒级别)离线数据处理(小时或天级别)SparkStreaming 是一个准实时(秒或分钟级别)、微批量的数据处理框架SparkStreaming 支持的很多数据输入源,如: Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等。数据输入后可以用 Spark 的高度抽象原语,如: map、 reduce、 join、 window 等进行运算。

2024-06-04 18:36:36 494

原创 详解 Spark SQL 代码开发之数据读取和保存

Spark 在安装编译后内部已经可以支持 Hive 表访问、 UDF (用户自定义函数) 以及 Hive 查询语言(HiveQL/HQL) 等。文件拷贝到项目的 resources 目录中,同时确保 target/classes 目录下也有该文件。将 Mysql 连接的驱动 jar 包拷贝到 Spark 安装目录的。目录下(外部 Hive 的元数据库使用 MySQL)两个配置文件拷贝到 Spark 安装目录的。配置文件拷贝到 Spark 安装目录的。将外部 Hive 的安装目录下的。

2024-06-04 12:29:25 959

原创 详解 Spark SQL 代码开发之用户自定义函数

多进一出函数,即聚合函数。

2024-06-03 19:17:42 214

原创 详解 Spark SQL 代码开发之入门案例

在 IDEA 中创建一个 Maven 工程后在 pom 文件中引入依赖。

2024-06-03 12:53:16 206

原创 详解 Spark SQL 核心编程知识

Spark SQL 是 Spark 用于结构化数据 (structured data) 处理的 Spark 模块,使用 SQL 的方式简化 RDD 的开发DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。与 RDD 的主要区别在于,DataFrame 带有 schema 元信息,即 DataFrame 所表示的二维表数据集的每一列都带有名称和类型与 Hive 类似,DataFrame 也支持嵌套数据类型(struct、array 和 map)

2024-06-02 19:19:53 1011

原创 详解 Spark核心编程之广播变量

广播变量是分布式共享只读变量。

2024-06-02 12:53:21 432

原创 详解 Spark 核心编程之累加器

​ 累加器可以用来把 Executor 端的变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在 Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge

2024-06-02 10:08:44 489

原创 详解 Spark 核心编程之 RDD 分区器

Spark 分区器的父类是 Partitioner 抽象类分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过 Shuffle 后进入哪个分区,进而决定了 Reduce 的个数只有 Key-Value 类型的 RDD 才有分区器,非 Key-Value 类型的 RDD 分区的值是 None每个 RDD 的分区索引的范围:0~(numPartitions - 1)/**1.继承 Partitioner 抽象类。

2024-06-01 19:58:07 288

原创 详解 Spark 核心编程之 RDD 持久化

【代码】详解 Spark 核心编程之 RDD 持久化。

2024-06-01 17:59:03 322

原创 详解 Spark 编程之 RDD 依赖关系

宽依赖由于存在 shuffle 操作,下游的 RDD 分区的数据计算需要等待上游 RDD 相关分区的数据全部执行完成后才能开始,所以存在不同阶段的划分,上游和下游 RDD 的每个分区都需要一个 task 来完成计算任务,所有阶段的划分和执行顺序可以由有向无环图 (DAG) 的形式来表示。窄依赖:OneToOneDependency,表示每一个父 (上游) RDD 的 Partition 最多被子 (下游) RDD 的一个 Partition 使用,类比喻为独生子女。

2024-06-01 15:06:30 1222

原创 详解 Spark 核心编程之 RDD 序列化

参考地址:https://github.com/EsotericSoftware/kryo。自定义 Kryo 序列化。

2024-05-31 12:27:00 270

原创 详解 Spark 核心编程之 RDD 算子

RDD 算子就是 RDD 的方法。

2024-05-30 20:45:41 867

原创 Spark 核心编程之 RDD 介绍

Resilient Distributed Dataset,简称 RDD,弹性分布式数据集。

2024-05-30 12:35:05 801 1

原创 详解 Spark 的运行架构

DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。Cluster 模式将用于监控和调度的 Driver 模块启动在 Yarn 集群资源中执行。一般应用于实际生产环境。Client 模式将用于监控和调度的 Driver 模块在客户端执行,而不是在 Yarn 中,所以一般用于测试。两种模式主要区别在于:Driver 程序的运行节点位置。

2024-05-29 18:23:10 1290 1

原创 详解 Spark 各种运行环境的搭建

Mesos 是 Apache 下的开源分布式资源管理框架Kubernetes(k8s)是目前最为流行的容器管理工具Windows 模式:将解压缩到无中文无空格的路径中执行解压缩文件路径下bin目录中的文件,启动 Spark 本地环境编写 Scala 程序执行或在 DOS 命令行窗口中执行提交指令。

2024-05-29 12:59:38 910

原创 详解 Scala 的泛型

​ 上下文限定是将泛型和隐式转换的结合产物,以下两者功能相同,使用上下文限定。获取隐式变量,如果此时无法查找到对应类型的隐式变量,会发生出错误。之后,方法内无法使用隐式参数名调用隐式参数,需要通过。泛型的上下限的作用是对传入的泛型进行限定。

2024-05-28 19:06:42 449

原创 详解 Scala 的隐式转换

当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将某个类型进行转换,实现二次编译通过。

2024-05-28 18:32:45 353

原创 详解 Scala 的模式匹配

/ 定义一个类// 定义伴生对象// 实现 apply 方法用于创建对象// 实现 unapply 方法用于拆解对象属性def unapply(student: Student): Option[(String, Int)] = { // Option 防止空指针None} else {// 创建对象// 对象模式匹配val result = student match { // 对象匹配的是各属性是否相同而不是地址。

2024-05-27 18:27:51 984 1

原创 详解 Scala 的集合类型

序列 Seq:类似于 Java 中的 List 接口集 Set:类似于 Java 中的 Set 接口映射 Map:类似于 Java 中的 Map 接口所有的集合都扩展自 Iterable 特质。

2024-05-26 19:11:57 361

原创 详解 Scala 面向对象相关知识

抽象类:使用 abstract 关键字修饰,相当于模板类,可以包含抽象的属性方法和非抽象的属性方法,可以被继承抽象属性:没有初始值的属性,只能存在于抽象类中,可以被继承实现抽象方法:没有具体实现的方法,只能存在于抽象类中,可以被继承实现// 定义抽象类// 非抽象属性// 抽象属性// 非抽象方法// 抽象方法// 定义继承类class Student extends Person { // 继承类也可以定义为抽象类。

2024-05-24 18:55:28 1036

原创 详解 Scala 的函数式编程

* 函数结构:*/概念:匿名函数是没有名字的函数,也称为 lambda 表达式。

2024-05-24 12:45:54 444

原创 Scala 的流程控制语句

循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为 false 则跳过,类似于 continue。Scala 为 for 循环这一常见的控制结构提供了非常多的特性,这些 for 循环的特性被称为 for 推导式或 for 表达式。Scala 去掉了 break 和 continue 关键字。需求:打印输出 n 行的等腰三角形。

2024-05-23 18:58:59 876 2

原创 详解 Scala 的运算符

Scala 运算符的本质是对象的方法。

2024-05-23 12:43:50 475

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除