自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 flink代码参考

window(TumblingProcessingTimeWindows.of(org.apache.flink.streaming.api.windowing.time.Time.seconds(10))) // 滚动窗口,窗口长度10秒。要想使用定时器,比如基于KeyedStream。//.window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5))) //滑动窗口,长度10s,步长5s。

2024-04-18 17:00:41 475 1

原创 ProcessFunction API(底层 API)

ProcessFunction API(底层 API)我们之前学习的转换算子是无法访问事件的时间戳信息和水位线信息的。而这在一些应用场景下,极为重要。例如 MapFunction 这样的 map 转换算子就无法访问时间戳或者当前事件的事件时间。基于此, DataStream API 提供了一系列的 Low-Level 转换算子。可以访问时间 戳、watermark 以及注册定时事件。还可以输出特定的一些事件,例如超时事件等。Process Function 用来构建事件驱动的应用以及实现自定义的业务逻辑

2022-03-16 17:11:43 380

原创 Flink 流处理API

Flink 流处理APIEnvironmentgetExecutionEnvironment创建一个执行环境,表示当前执行程序的上下文。 如果程序是独立调用的,则此方法返回本地执行环境;如果从命令行客户端调用程序以提交到集群,则此方法返回此集群的执行环境,也就是说, getExecutionEnvironment 会根据查询运行的方式决定返回什么样的运行环境,是最常用的一种创建执行环境的方式。ExecutionEnvironment env = ExecutionEnvironment.getEx

2022-03-10 15:27:03 2821

原创 Flink 部署

Flink 部署下载:https://archive.apache.org/dist/flink/flink-1.10.1/Standalone 模式解压缩 flink-1.10.1-bin-scala_2.12.tgz,进入 conf 目录中。修改 flink/conf/flink-conf.yamljobmanager.rpc.address: hadoop101修改 /conf/slaves 文件hadoop102hadoop103分发给另外两台机子xsync flink/

2022-03-09 16:03:48 505

原创 Flink 快速上手

Flink 快速上手1搭建 maven 工程 FlinkTutorialpom 文件<dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.10.1</version> </dependency> <depe

2022-03-08 17:35:21 1727

原创 Flink CEP 简介

Flink CEP 简介什么是 CEP• 复杂事件处理(Complex Event Processing,CEP)• Flink CEP是在 Flink 中实现的复杂事件处理(CEP)库• CEP 允许在无休止的事件流中检测事件模式,让我们有机会掌握数据中重要的部分• 一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想得到的数据 —— 满足规则的复杂事件CEP 的特点• 目标:从有序的简单事件流中发现一些高阶特征• 输入:一个或多个由简单事件构成的事件流• 处理:识别简单

2022-03-08 14:57:21 321

原创 Table API 和 Flink SQL

Table API 和 Flink SQLTable API 和 Flink SQL 是什么• Flink 对批处理和流处理,提供了统一的上层 API• Table API 是一套内嵌在 Java 和 Scala 语言中的查询API,它允许以非常直观的方式组合来自一些关系运算符的查询• Flink 的 SQL 支持基于实现了 SQL 标准的 Apache Calcite基本程序结构• Table API 和 SQL 的程序结构,与流式处理的程序结构十分类似StreamTableEnviron

2022-03-08 14:50:35 247

原创 Flink 的状态一致性

Flink 的状态一致性什么是状态一致性• 有状态的流处理,内部每个算子任务都可以有自己的状态• 对于流处理器内部来说,所谓的状态一致性,其实就是我们所说的计算结果要保证准确。• 一条数据不应该丢失,也不应该重复计算• 在遇到故障时可以恢复状态,恢复以后的重新计算,结果应该也是完全正确的。状态一致性分类• AT-MOST-ONCE(最多一次)➢ 当任务故障时,最简单的做法是什么都不干,既不恢复丢失的状态,也不重播丢失的数据。At-most-once 语义的含义是最多处理一次事件。• A

2022-03-08 14:05:35 157

原创 Flink 的容错机制

Flink 的容错机制一致性检查点(Checkpoints)• Flink 故障恢复机制的核心,就是应用状态的一致性检查点• 有状态流应用的一致检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(一份快照);这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候从检查点恢复状态• 在执行流应用程序期间,Flink 会定期保存状态的一致检查点• 如果发生故障, Flink 将会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程• 遇到故障之后,第一步就是重启应用•

2022-03-08 13:57:12 140

原创 Flink 状态管理

Flink 状态管理Flink 中的状态• 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态• 可以认为状态就是一个本地变量,可以被任务的业务逻辑访问• Flink 会进行状态管理,包括状态一致性、故障处理以及高效存储和访问,以便开发人员可以专注于应用程序的逻辑• 在 Flink 中,状态始终与特定算子相关联• 为了使运行时的 Flink 了解算子的状态,算子需要预先注册其状态➢ 总的说来,有两种类型的状态:• 算子状态(Operator State)• 算子状态的作

2022-03-08 13:51:42 710

原创 Flink 中的时间语义和watermark

Flink 中的时间语义和watermark时间(Time)语义• Event Time:事件创建的时间• Ingestion Time:数据进入Flink的时间• Processing Time:执行操作算子的本地系统时间,与机器相关哪种时间语义更重要• 不同的时间语义有不同的应用场合• 我们往往更关心事件时间(Event Time)• 某些应用场合,不应该使用 Processing Time• Event Time 可以从日志数据的时间戳(timestamp)中提取➢ 2017

2022-03-06 17:29:18 106

原创 Flink window API

Flink window API窗口(window)• 一般真实的流都是无界的,怎样处理无界的数据?• 可以把无限的数据流进行切分,得到有限的数据集进行处理 —— 也就是得到有界流• 窗口(window)就是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶(bucket)中进行分析window 类型• 时间窗口(Time Window)➢ 滚动时间窗口➢ 滑动时间窗口➢ 会话窗口• 计数窗口(Count Window)➢ 滚动计数窗口➢ 滑动计数窗口滚动窗口(Tum

2022-03-06 14:43:06 121

原创 Flink 运行架构

Flink 运行架构Flink 运行时的组件作业管理器(JobManager)• 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager 所控制执行。• JobManager 会先接收到要执行的应用程序,这个应用程序会包括:作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的JAR包。• JobManager 会把JobGraph转换成一个物理层面的数据流图,这个图被叫做“执行图”(Execut

2022-03-06 14:26:41 127

原创 Flink简介

Flink简介Flink 是什么• Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded datastreams.• Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。为什么选择 Flink• 流数据更真实地反映了我们的生活方式• 传统的数据架构是基于有限数据集的• 我们的目标

2022-03-03 20:35:42 150

原创 Spark 核心编程

Spark 核心编程Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于处理不同的应用场景。三大数据结构分别是:➢ RDD : 弹性分布式数据集➢ 累加器:分布式共享只写变量➢ 广播变量:分布式共享只读变量接下来我们一起看看这三大数据结构是如何在数据处理中使用的。1 RDD1.1 什么是 RDDRDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不

2022-01-05 15:43:06 217

原创 Spark 运行架构

Spark 运行架构1 运行架构Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务。2 核心组件由上图可以看出,对于 Spark 框架有两个核心组件:2.1 DriverSpark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码

2022-01-05 14:43:11 136

原创 Spark 运行环境

Spark 运行环境Spark 作为一个数据处理框架和计算引擎,被设计在所有常见的集群环境中运行, 在国内工作中主流的环境为 Yarn,不过逐渐容器式环境也慢慢流行起来。接下来,我们就分别看看不同环境下 Spark 的运行1 Local 模式所谓的 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学,调试,演示等,之前在 IDEA 中运行代码的环境我们称之为开发环境,不太一样。1.1 解压缩文件将 spark-3.0.0-bin-hadoop3.2

2022-01-05 14:34:49 213

原创 Spark 快速上手

Spark 快速上手在大数据早期的课程中我们已经学习了 MapReduce 框架的原理及基本使用,并了解了其底层数据处理的实现方式。接下来,就让咱们走进 Spark 的世界,了解一下它是如何带领我们完成数据处理的。1 创建 Maven 项目1.1 增加 Scala 插件Spark 由 Scala 语言开发的,所以本课件接下来的开发所使用的语言也为 Scala,咱们当前使用的 Spark 版本为 3.0.0,默认采用的 Scala 编译版本为 2.12,所以后续开发时。我们依然采用这个版本。开发前请保

2022-01-05 13:49:39 954

原创 Spark 概述

Spark 概述1 Spark 是什么Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。2 Spark and Hadoop在之前的学习中,Hadoop 的 MapReduce 是大家广为熟知的计算框架,那为什么咱们还要学习新的计算框架 Spark 呢,这里就不得不提到 Spark 和 Hadoop 的关系。首先从时间节点上来看:➢ Hadoop⚫ 2006 年 1 月,Doug Cutting 加入 Yahoo,领导 Hadoop 的开发⚫ 2008 年 1 月,Had

2022-01-05 13:40:51 247

原创 Scala 泛型

Scala 泛型1 协变和逆变1)语法class MyList[+T]{ //协变}class MyList[-T]{ //逆变}class MyList[T] //不变2)说明协变:Son 是 Father 的子类,则 MyList[Son] 也作为 MyList[Father]的“子类”。逆变:Son 是 Father 的子类,则 MyList[Son]作为 MyList[Father]的“父类”。不变:Son 是 Father 的子类,则 MyList[Father]与 MyLi

2021-12-30 19:44:50 136

原创 Scala 隐式转换

Scala 隐式转换当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将类型进行转换,实现二次编译1 隐式函数1)说明隐式转换可以在不需改任何代码的情况下,扩展某个类的功能。2)案例实操需求:通过隐式转化为 Int 类型增加方法。class MyRichInt(val self: Int) { def myMax(i: Int): Int = { if (self < i) i else self } def myMin(i: Int): I

2021-12-30 19:41:30 240

原创 Scala 异常

Scala 异常语法处理上和 Java 类似,但是又不尽相同。1 Java 异常处理public class ExceptionDemo { public static void main(String[] args) { try { int a = 10; int b = 0; int c = a / b; }catch (ArithmeticException e){ // catch 时,需要将范围小的写到前面 e.printStackTrace(); }

2021-12-30 19:35:34 107

原创 Scala 模式匹配

Scala 模式匹配Scala 中的模式匹配类似于 Java 中的 switch 语法int i = 10switch (i) { case 10 :System.out.println("10");break; case 20 : System.out.println("20");break; default : System.out.println("other number");break;}但是 scala 从语法中补充了更多的功能,所以更加强大。1 基本语法模式匹

2021-12-30 19:32:07 168

原创 Scala 集合-队列并行集合

Scala 集合-队列1)说明Scala 也提供了队列(Queue)的数据结构,队列的特点就是先进先出。进队和出队的方法分别为 enqueue 和 dequeue。2)案例实操object TestQueue { def main(args: Array[String]): Unit = { val que = new mutable.Queue[String]() que.enqueue("a", "b", "c") println(que.dequeue()) println(

2021-12-29 22:02:23 301

原创 Scala 集合-集合常用函数

Scala 集合-集合常用函数1 基本属性和常用操作1)说明(1)获取集合长度(2)获取集合大小(3)循环遍历(4)迭代器(5)生成字符串(6)是否包含2)案例实操object TestList { def main(args: Array[String]): Unit = { val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7) //(1)获取集合长度 println(list.length) //(2)获取集合大小

2021-12-29 22:00:13 363

原创 Scala 集合-元组

Scala 集合-元组1)说明元组也是可以理解为一个容器,可以存放各种相同或不同类型的数据。说的简单点,就是将多个无关的数据封装为一个整体,称为元组。注意:元组中最大只能有 22 个元素。2)案例实操(1)声明元组的方式:(元素 1,元素 2,元素 3)(2)访问元组(3)Map 中的键值对其实就是元组,只不过元组的元素个数为 2,称之为对偶object TestTuple { def main(args: Array[String]): Unit = { //(1)声明元组的方式

2021-12-29 21:46:39 166

原创 Scala 集合-Map集合

Scala 集合-Map集合Scala 中的 Map 和 Java 类似,也是一个散列表,它存储的内容也是键值对(key-value映射1 不可变 Map1)说明(1)创建不可变集合 Map(2)循环打印(3)访问数据(4)如果 key 不存在,返回 02)案例实操object TestMap { def main(args: Array[String]): Unit = { // Map //(1)创建不可变集合 Map val map = Map( "a"-&gt

2021-12-29 21:45:18 432

原创 Scala 集合-Set 集合

Scala 集合-Set 集合默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用scala.collection.mutable.Set 包1 不可变 Set1)说明(1)Set 默认是不可变集合,数据无序(2)数据不可重复(3)遍历集合2)案例实操object TestSet { def main(args: Array[String]): Unit = { //(1)Set 默认是不可变集合,数据无序 val set = Set(1,2,3,4,5,6)

2021-12-29 21:42:29 1497

原创 Scala 集合-列表 List

Scala 集合-列表 List1 不可变 List1)说明(1)List 默认为不可变集合(2)创建一个 List(数据有顺序,可重复)(3)遍历 List(4)List 增加数据(5)集合间合并:将一个整体拆成一个一个的个体,称为扁平化(6)取指定数据(7)空集合 Nil2)案例实操object TestList { def main(args: Array[String]): Unit = { //(1)List 默认为不可变集合 //(2)创建一个 List(数据有顺序,

2021-12-29 21:40:05 365

原创 Scala 集合-数组

Scala 集合-数组1 不可变数组1)第一种方式定义数组定义:val arr1 = new Array[Int](10)(1)new 是关键字(2)[Int]是指定可以存放的数据类型,如果希望存放任意数据类型,则指定 Any(3)(10),表示数组的大小,确定后就不可以变化2)案例实操object TestArray{ def main(args: Array[String]): Unit = { //(1)数组定义 val arr01 = new Array[Int](4)

2021-12-29 21:37:07 333

原创 Scala 集合-集合简介

Scala 集合-集合简介1)Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable特质。2)对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两个包不可变集合:scala.collection.immutable可变集合: scala.collection.mutable3)Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于 java 中的 String 对象

2021-12-29 21:30:56 136

原创 Scala 面向对象-扩展

Scala 面向对象-扩展1 类型检查和转换1)说明(1)obj.isInstanceOf[T]:判断 obj 是不是 T 类型。(2)obj.asInstanceOf[T]:将 obj 强转成 T 类型。(3)classOf 获取对象的类名。2)案例实操class Person{}object Person { def main(args: Array[String]): Unit = { val person = new Person //(1)判断对象是否为某个类型的实例 v

2021-12-28 23:16:10 138

原创 Scala 面向对象-特质(Trait)

Scala 面向对象-特质(Trait)Scala 语言中,采用特质 trait(特征)来代替接口的概念,也就是说,多个类具有相同的特质(特征)时,就可以将这个特质(特征)独立出来,采用关键字 trait 声明。Scala 中的 trait 中即可以有抽象属性和方法,也可以有具体的属性和方法,一个类可以混入(mixin)多个特质。这种感觉类似于 Java 中的抽象类。Scala 引入 trait 特征,第一可以替代 Java 的接口,第二个也是对单继承机制的一种补充。1 特质声明1)基本语法tr

2021-12-28 23:13:48 265

原创 Scala 面向对象-单例对象(伴生对象)

Scala 面向对象-单例对象(伴生对象)Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概念)。但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象来模拟类对象,该对象为单例对象。若单例对象名与类名一致,则称该单例对象这个类的伴生对象,这个类的所有“静态”内容都可以放置在它的伴生对象中声明。1 单例对象语法1)基本语法object Person{val country:String="China"}2)说明(1)单例对象采

2021-12-28 23:05:35 227

原创 Scala 面向对象-抽象类

Scala 面向对象-抽象类1 抽象属性和抽象方法1)基本语法(1)定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类(2)定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性(3)定义抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法案例实操abstract class Person { val name: String def hello(): Unit}

2021-12-28 23:03:35 105

原创 Scala 面向对象-继承和多态

Scala 面向对象-继承和多态1)基本语法class 子类名 extends 父类名 { 类体 }(1)子类继承父类的属性和方法(2)scala 是单继承2)案例实操(1)子类继承父类的属性和方法(2)继承的调用顺序:父类构造器->子类构造器class Person(nameParam: String) { var name = nameParam var age: Int = _ def this(nameParam: String, ageParam: Int) { th

2021-12-28 22:43:59 639

原创 Scala 面向对象-类和对象

Scala 面向对象-类和对象类:可以看成一个模板对象:表示具体的事物1 定义类1)回顾:Java 中的类如果类是 public 的,则必须和文件名一致。一般,一个.java 有一个 public 类注意:Scala 中没有 public,一个.scala 中可以写多个类。1)基本语法[修饰符] class 类名 { 类体} 说明(1)Scala 语法中,类并不声明为 public,所有这些类都具有公有可见性(即默认就是public)(2)一个 Scala 源文件可以包含多个类

2021-12-28 22:40:46 151

原创 Scala 面向对象-Scala 包

Scala 面向对象Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的。Scala 中语法和 Java 不同,补充了更多的功能。1 Scala 包1)基本语法package 包名2)Scala 包的三大作用(和 Java 一样)(1)区分相同名字的类(2)当类很多时,可以很好的管理类(3)控制访问范围1.1 包的命名1)命名规则只能包含数字、字母、下划线、小圆点.,但不能用数字开头,也不要使用关键字。2)案例实操demo.class.exec1 //错误,因为

2021-12-28 22:29:30 352

原创 Scala 函数式编程-函数高级

Scala 函数式编程-函数高级1、高阶函数在 Scala 中,函数是一等公民。怎么体现的呢?对于一个函数我们可以:定义函数、调用函数object TestFunction { def main(args: Array[String]): Unit = { // 调用函数 foo() } // 定义函数 def foo():Unit = { println("foo...") }}但是其实函数还有更高阶的用法1)函数可以作为值进行传递object TestFunctio

2021-12-28 14:58:54 313

原创 Scala 函数式编程-函数基础

Scala 函数式编程1)面向对象编程解决问题,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题。对象:用户行为:登录、连接 JDBC、读取数据库属性:用户名、密码Scala 语言是一个完全面向对象编程语言。万物皆对象对象的本质:对数据和行为的一个封装2)函数式编程解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题。例如:请求->用户名、密码->连接 JDBC->读取数据库Scala 语言是一个完全函

2021-12-28 14:37:06 141

空空如也

空空如也

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

TA关注的人

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