Spark
文章平均质量分 75
pageniao
这个作者很懒,什么都没留下…
展开
-
flink程序在消费kafka数据时出现Error sending fetch request问题
在程序已经稳定运行多天、未对代码做任何修改、查看所消费数据源未出现数据增多的情况下,有一个flink程序最近出现了积压问题,很是疑惑,观察几天并查看了日志发现,每当出现加压时便会伴随该日志出现,因此便着手解决该问题。...原创 2022-08-11 15:38:33 · 7819 阅读 · 0 评论 -
Table API & SQL——与DataStream API 整合(1.14.4)
DataStream API 提供流处理较低层次的、原始的编程API,例如时间、状态和数据流管理,而Table API则在此基础上抽象出许多内部构件,提供结构化和声明式API。两种API都可以处理有界或无界流。为了提高效率,两种API都分别提供了优化的批执行模式,然而因为批式一种特殊的流,所以可以在一个标准流执行模式运行有界流。两种API不需相互依赖,可以分别独自定义完整的数据流管道,但是在实际使用过程种,为了各种便利的原因可以混合使用他们:相比与DataStream API ,Table 生态系统原创 2022-05-04 19:40:18 · 864 阅读 · 1 评论 -
Table API & SQL——概念和通用 API(1.14.4)
1. Table API & SQLTable API & SQL接口和DataStream API无缝衔接,他们之间可以很容易的相互转换。使用这些接口构建程序需要如下依赖:<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-api-scala-bridge_2.11</artifactId> <version>原创 2022-04-30 22:03:28 · 2386 阅读 · 1 评论 -
Flink消费kafka的offset设置
1.问题问题简介及背景在使用Flink自带的Kafka消费API时,我们可以像单纯的使用Kafka消费对象API对其进行相应的属性设置,例如,读取offset的方式、设置offset的方式等。但是,Flink具有checkpoint功能,保存各运算算子的状态,也包括消费kafka时的offset,那这两种情况分别在什么时候起作用呢?2. Flink checkpoint设置flink并不依赖kafka或zookeeper保证容错,其保存offset只是为了外部来查询监视kafka数据的消费情况。但其提原创 2022-04-19 19:47:16 · 10374 阅读 · 2 评论 -
Flink 两阶段提交sink探索(Mysql)
1. 简单介绍目的Flink能够提供其应用内部范围的端到端的exeatly-onece语义数据流转,其本身提供的Kafka Sink连接器便继承了TwoPhaseCommitSinkFunction抽象类,使用两阶段提交方式(需事务操作支持)结合Flink的checkpoint保证端到端一致性。而Mysql数据库支持事务,那我们为了实现数据写入Mysql时也保证程序的端到端一致性,是否可以继承该抽象类?2. 主程序import org.apache.flink.shaded.jackson2.com.转载 2022-04-18 21:30:10 · 975 阅读 · 3 评论 -
Flink Web UI中不显示各算子节点的接收数据量
1. 现象各节点发送/接收数据量都是0可以看到各节点是链接在一起的2. 原因整个流程各operator task的并行度相同,而Flink默认不监控与外界数据源的输入输出,可以把中间算子的并行度设为相同的就可以看到中间数据QPS;可以看到各节点的operator task是分开连接在一起的,这样会显示各节点的QPS,由于我的是测试的数据不是kafka一直有数,所以过段时间QPS又降为0了。...原创 2022-04-03 15:54:05 · 3036 阅读 · 1 评论 -
Spark的DataFramex写入Oracle中数据类型转换
1. 标准hive sql可参考文章2. Spark DSL 风格 sql$"field_name".cast(DecimalType(16, 4)) as "field_name"3. 数值类型的值超过Oracle字段精度未在写入数据库之前定义精度,会报ORA-01438:值大于允许精度;写入之前设定其精度,数据将写入数据库,但改字段为空值;且同时改字段不能为空时,报ORA-01400:无法将null值插入…;...原创 2022-03-25 23:23:38 · 3287 阅读 · 0 评论 -
Window 环境连接虚拟机中Hadoop及Spark集群
Window 环境连接虚拟机中Hadoop及Spark集群1.Windows安装Hadoop1.1 配置环境变量1.2 下载相似版本的文件1.Windows安装Hadoop在windows上把hadoop的压缩包解压到一个没有空格的目录下,比如是D盘根目录1.1 配置环境变量HADOOP_HOME=D:\hadoop-2.7.7Path下添加 %HADOOP_HOME%\bin1.2 下载相似版本的文件hadoop.dll #存放在C:\Windows\System32 目录下winutil原创 2021-12-16 17:30:36 · 2764 阅读 · 0 评论 -
Spark-sql DSL 风格
Spark-sql DSL 风格1. select、selectExpr函数2. 使用withColumn3. distinct/dropDuplicates去重方法4. pivot 行列旋转5. Spark UDF6. agg函数1. select、selectExpr函数select、selectExpr函数2. 使用withColumn使用withColumn3. distinct/dropDuplicates去重方法distinct/dropDuplicates 去重方法4. pivo原创 2021-11-15 08:53:38 · 1732 阅读 · 0 评论 -
Flink‘s State & Fault Tolerance
1. Working with State本部分将介绍Flink提供的写状态程序的API。1.1 Keyed DataStream如果想使用键控状态(keyed state),首先需要指定一个DataStream的key,以key将状态分区。通常使用keyBy(KeySelector/键选择器)指定DataStream的key,形成一个键控流(KeyedStream),允许在其上运用键控状态。键选择器函数(key selector function)将处理的每条记录数据作为输入,返回一每条记录的ke原创 2021-08-08 18:08:55 · 186 阅读 · 0 评论 -
Spark 从Hive表中读数据或向Hive中写入数据
Spark SQL支持在Hive中的数据读写,但是Hive中有大量的依赖在Spark中不存在,所以在使用过程中要配置这些依赖。Configuration of Hive is done by placing your hive-site.xml, core-site.xml (for security configuration), and hdfs-site.xml (for HDFS configuration) file in conf/.下面是使用Hive的测试:import org.apac原创 2021-07-27 19:50:30 · 2473 阅读 · 3 评论 -
Spark(Structured Streaming)
1. 结构化流介绍Structured Streaming 是基于Spark SQL引擎的可扩展和和可容错的流处理引擎。这样我们可以像处理静态批计算一样处理流,随着流数据的追加,Spark SQL将不断更新最终计算结果。同事,我们可以使用Scala、Java、Python或者R语言的Dataset/DataFrame API去处理流聚合(streaming aggregations)、事件时间窗口(event-time windows)、流和批的joins(stream-to-batch joins)等,原创 2021-07-20 14:06:51 · 206 阅读 · 0 评论 -
Flink三种流和窗口转换的梳理
1. 简单介绍目前所能理解的程度(持续更新),知道Flink中有三种流,DataStream, AllWindowedStream,KeyedStream,WindowedStream。1.1 DataStream经过以下方法可以转化为AllWindowedStream // 1.TimeWindow之滚动窗口 def timeWindowAll(size: Time): AllWindowedStream[T, TimeWindow] = { new AllWindowedStream(原创 2021-04-07 22:39:34 · 973 阅读 · 0 评论 -
Flink 部分Function的依赖关系
1. Function 接口的实现Function (org.apache.flink.api.common.functions)RichFunction (org.apache.flink.api.common.functions)MapFunction (org.apache.flink.api.common.functions)KeySelector (org.apache.flink.api.java.functions)ReduceFunction (org.apache.flink.原创 2021-04-05 17:44:38 · 888 阅读 · 0 评论 -
Flink 流处理中的特殊概念
1. 流处理中的特殊概念Table API和SQL,本质上还是基于关系型表的操作方式;而关系型表、关系代数,以及SQL本身,一般是有界的,更适合批处理的场景。这就导致在进行流处理的过程中,理解会稍微复杂一些,需要引入一些特殊概念。1.1 流处理和关系代数(表,及SQL)的区别可以看到,其实关系代数(主要就是指关系型数据库中的表)和SQL,主要就是针对批处理的,这和流处理有天生的隔阂。1.2 动态表(Dynamic Tables)因为流处理面对的数据,是连续不断的,这和我们熟悉的关系型数据库中保存原创 2021-04-04 23:20:22 · 438 阅读 · 0 评论 -
Flink Table API 和 Flink SQL
1. 简单介绍1.1 什么是 Table API 和 Flink SQLFlink本身是批流统一的处理框架,所以Table API和SQL,就是批流统一的上层处理API。目前功能尚未完善,处于活跃的开发阶段。Table API是一套内嵌在Java和Scala语言中的查询API,它允许我们以非常直观的方式,组合来自一些关系运算符的查询(比如select、filter和join)。而对于Flink SQL,就是直接可以在代码中写SQL,来实现一些查询(Query)操作。Flink的SQL支持,基于实现了原创 2021-03-29 22:32:46 · 699 阅读 · 0 评论 -
Flink状态编程
流式计算分为无状态和有状态两种情况。无状态的计算观察每个独立事件,并根据最后一个事件输出结果。例如,流处理应用程序从传感器接收温度读数,并在温度超过90度时发出警告。有状态的计算则会基于多个事件输出结果。以下是一些例子。所有类型的窗口。例如,计算过去一小时的平均温度,就是有状态的计算。所有用于复杂事件处理的状态机。例如,若在一分钟内收到两个相差20度以上的温度读数,则发出警告,这是有状态的计算。流与流之间的所有关联操作,以及流与静态表或动态表之间的关联操作,都是有状态的计算。下图展示了无状态流处原创 2021-03-28 17:16:37 · 769 阅读 · 0 评论 -
Flink ProcessFunction API
Flink提供的转换算子是无法访问事件的时间戳信息和水位线信息的。而这在一些应用场景下,极为重要。例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间。基于此,DataStream API提供了一系列的Low-Level转换算子。可以访问时间戳、watermark以及注册定时事件。还可以输出特定的一些事件,例如超时事件等。Process Function用来构建事件驱动的应用以及实现自定义的业务逻辑(使用之前的window函数和转换算子无法实现)。例如,Flink SQL就原创 2021-03-27 22:50:49 · 246 阅读 · 0 评论 -
Flink转换算子
1. 基本转换操作2.1. mapval streamMap = stream.map { x => x * 2 }2.2 flapMapval streamFlatMap = stream.flatMap{ x => x.split(" ")}2.3. Filterval streamFilter = stream.filter{ x => x == 1}2. 分组操作2.1. KeyByDataStream → KeyedStream原创 2021-03-27 10:18:01 · 262 阅读 · 0 评论 -
Flink数据源简介
1. 从集合读取数据// 定义样例类,传感器id,时间戳,温度case class SensorReading(id: String, timestamp: Long, temperature: Double)object Sensor { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment val stream1 = env原创 2021-03-25 22:36:53 · 301 阅读 · 0 评论 -
Flink入门学习一
1. Flink简介1.1 初识FlinkApache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。1.2 Flink的重要特点参看文章2. 快速上手2.1 搭建maven工程 flink-20212.2 pom文件 <dependencies> <dependency> <groupId>org.a转载 2021-03-23 22:48:31 · 228 阅读 · 0 评论 -
Flink入门学习(二)
1. Time与Window1.1 Time在Flink的流式处理中,会涉及到时间的不同概念,如下图所示:Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。Ingestion Time:是数据进入Flink的时间。Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是Processing Time。例如,一条转载 2021-03-18 23:29:04 · 166 阅读 · 0 评论 -
Kafka手动提交offset和幂等性设置(精确一次性消费)
1. 精确一次消费1.2 定义精确一次消费(Exactly-once) 是指消息一定会被处理且只会被处理一次。不多不少就一次处理。如果达不到精确一次消费,可能会达到另外两种情况:至少一次消费(at least once),主要是保证数据不会丢失,但有可能存在数据重复问题。最多一次消费 (at most once),主要是保证数据不会重复,但有可能存在数据丢失问题。如果同时解决了数据丢失和数据重复的问题,那么就实现了精确一次消费的语义了。1.2 问题如何产生数据何时会丢失: 比如实时计算任务原创 2021-03-10 22:45:54 · 1818 阅读 · 3 评论 -
SparkContext相关内容
1. 概述SparkContext是Spark主程序的入口。SparkContext用于连接Spark集群、创建RDD、累加器(accumlator)、广播变量(broadcast variables)。一个JVM只能有一个SparkContext。可以看到SparkContext处于DriverProgram核心位置,所有与Cluster、Worker Node交互的操作都需要SparkContext来完成。2. SparkContext相关组件2.1 SparkConfSparkConf为原创 2021-02-18 21:50:36 · 295 阅读 · 3 评论 -
Spark基础
1. Spark 概述1.1 什么是 Spark1、定义Spark是一种基于内存的快速、通用、可扩展的大数据分析引擎。2、历史2009年诞生于加州大学伯克利分校AMPLab,项目采用Scala编写;2010年开源;2013年6月成为Apache孵化项目;2014年2月成为Apache顶级项目。1.2 Spark内置模块Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilie原创 2021-02-17 20:38:34 · 165 阅读 · 6 评论 -
Spark内核解析
1. Spark 内核概述Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制、Spark任务调度机制、Spark内存管理机制、Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更好地完成Spark代码设计,并能够帮助我们准确锁定项目运行过程中出现的问题的症结所在。1.1 Spark核心组件回顾1.1.1 DriverSpark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:将用原创 2021-02-02 20:00:37 · 188 阅读 · 0 评论 -
Spark中DStream.foreachRDD()方法的使用
一、简单介绍DStream.foreachRDD()方法实际上是Spark流处理的一个处理及输出RDD的方法。这个方法使我们能够访问底层的DStream对应的RDD进而根据我们需要的逻辑对其进行处理。例如,我们可以通过foreachRDD()方法来访问每一条mini-batch中的数据,然后将它们存入数据库。需要注意的是:DStream.foreachRDD()传给我们的参数是一个RDD[userbatch],而不是单个的user,因此我们需要进一步循环来根据需要处理其中每一个user。我们不能用原创 2021-02-01 21:30:10 · 771 阅读 · 0 评论 -
updateStateByKey使用详情
一、简单概述简单来说,该算子能够记录流的累计状态。updateStateByKey操作允许我们维护任意状态,同时不断地用新信息更新它。在有新的数据信息进入或更新时,可以让用户保持想要的任何状态。使用这个功能需要完成两步:定义状态: 可以是任意数据类型定义状态更新函数: 用一个函数指定如何使用先前的状态,从输入流中的新值更新状态。对于有状态操作,要不断的把当前和历史的时间切片的RDD累加计算,随着时间的流失,计算的数据规模会变得越来越大;那么要思考的是如果数据量很大的时候,或者对性能的要求极原创 2021-02-01 11:57:14 · 1677 阅读 · 0 评论 -
开窗函数
一、简单概述开窗函数与聚合函数一样,都是对行的集合进行聚合计算。开窗用于定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的行和和聚合列。开窗函数的调用格式为:函数名(列) OVER(选项)第一大类:聚合开窗函数 -》聚合函数 OVER(选项),这里的选项可以是PARTITION BY子句,但不可以是ORDER BY子句。第二大类:排序开窗函数-》排序函数(列)OVER(选项),这里的选项可以是ORD原创 2021-01-07 22:16:31 · 1199 阅读 · 0 评论 -
idea导入SparkSession隐式转换,自动消失
SparkSession对象已经构建,但是每当导入隐式转换会自动消失import sparkSession.implicits._解决方法:把对勾去掉原创 2021-01-05 21:26:44 · 816 阅读 · 0 评论 -
SparkCore
RDD概述1.1 什么是RDDRDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。1.2 RDD的属性一组分区(Partition),即数据集的基本组成单位;一个计算每个分区的函数;RDD之间的依赖关系;一个Partitioner,即RDD的分片函数;一个列表,存储存取每个Partition的优先位置(preferred location)。1.原创 2020-05-24 10:57:38 · 366 阅读 · 0 评论 -
SparkStreaming
一、Spark Streaming概述1.1 Spark Streaming是什么Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。和Spark基于RDD的概念很相似,Spark Streaming使用离散化流(disc原创 2020-05-19 21:59:34 · 204 阅读 · 0 评论 -
Spark SQL
一、Spark SQL概述1.1 什么是Spark SQLSpark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快原创 2020-05-13 08:10:59 · 372 阅读 · 0 评论 -
Spark HA集群的安装
所需要的安装环境Hadoop-2.7.7 HA集群安装成功(包含Java8、Zookeeper-1.2.6、hadoop-2.7.7)Scala可以不安装;安装过程解压安装包将安装包解压到相应的文件夹修改配置文件需要修改spark-env.sh、slaves两个配置文件1.复制spark-env.sh.template并重命名为spark-env.sh,在文件最后添加配置内容在...原创 2019-10-25 12:16:22 · 216 阅读 · 0 评论