版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
让我们来回顾一下DataSet/DataFrame的优点(为了方便描述,下文中我们统一DataFrame代指DataSetDataFrame高级API,提供类似于SQLquery口,方便熟悉关系型数据库的开发SparkSQL行引擎会自动优化DataFrame序,而用RDDAPI发的程序本质上需要工程师自己构造RDD的DAG执行图,所以依赖于工程师自己去优化。那么我们自然会想到,如果可以拥有一个基于DataFrameAPI的流处理模块,作为工程师的我们就不需要去用相对lowlevel的DStreamAPI去处理无边界数据,这样会大大提升基于这个思想,2016年,Spark在其2.0版本中推出了结构化流数据处理的模StructuredStreamingStructuredStreaming是基于SparkSQL引擎实现的,依靠StructuredStreaming,在据。随着流数据的持续输入,SparkSQL引擎会帮助我们持续地处理新数据,并且更新计今天,就让我们来一起学习StructuredStreaming的原理以及应用StructuredStreaming流数据处理最基本的问题就是如何对不断更新的无边界数据建之前讲的Sarktreaming就是把流数据按一定的时间间隔分割成许多个小的数据块进行批处理。在SrctedSreaming的模型中,我们要把数据看成一个无边界的关系型的数据表。每一个数据都是表中的一行,不断会有新的数据行被添加到表里来。我们可以对这个表做任何类似批处理的查询,Spark会帮我们不断对新加入的数据进行处理,并更新计算结果。与SparkStreaming类似,StructuredStreaming也是将输入的数据流按照时间(以一秒为例)划分成数据段。每一秒都会把新输入的数据添加到表中Spark也会每秒更新输出结果。输出结果也是表的形式,输出表可以写入硬盘或者HDFS。这里我要介绍一下StructuredStreaming的三种输出模式完全模式 Mode):整个更新过的输出表都被写入外部附加模式(AppendMode):上一次触发之后新增加的行才会被写入外部。如果更新模式 Mode):上一次触发之后被更新的行才会被写入外部需要注意的是,StructuredStreaming并不会完全输入数据。每个时间间隔它都会读取的输入,进行处理,更新输出表,然后把这次的输入删除。StructuredStreamingStructuredStreaming的模型在根据时间(EventTime)处理数据时十分方便我们在第六讲中曾经讲过时间和处理时间(ProcessingTime)的区别。这里我再简单说一下。时间指的是发生的时间,是数据本身的属性;而处理时间指的是Spark接收到数据的时间。很多情况下,我们需要基于时间来处理数据。比如说,统计每个小时接到的订单数量,一个订单很有可能在12:59被创建,但是到了13:01才被处理。在StructuredStreaming的模型中,由于每个数据都是输入数据表中的一行,那么时间就是行中的一列。依靠DataFrameAPI提供的类似于SQL的接口,我们可以很方便地StreamingDataFrame在StructuredStreaming发布以后,DataFrame既可以代表静态的有边界数据,也可以代表无边界数据。之前对静态DataFrame的同样也适用于流式DataFrame。接创建SparkSession.readStream()返回的DataStreamReader可以用于创建流DataFrame。它支持多种类型的数据流作为输入,比如文件、Kafka、socket等。代socketDataFrame=.option("host",.option("port",上边的代码例子创建了一个DataFrame,用来来自localhost:9999的数据流基本的查询操流DataFrame同静态DataFrame一样,不仅支持类似SQL的查询操作(如select和where等),还支持RDD的转换操作(如map和filter)。让我们一起来看下面的例假设我们已经有一个DataFrame代表一个学生的数据流,即每个数据是一个学生,每个学生有名字(name)、(age)、身高(height)和年级(grade)四个属性,我们可以用DataFrameAPI去做类似于SQL的Query代df=…//这个DataFrame代表学校学生的数据流,schema是{name:string,age:number,df.select("name").where("age>10")//返回大于10岁的学生名字列df.groupBy("grade").count()//返回每个年级学生的人df.sort_values([‘age’],ascending=False).head(100)//返回100个最大的学在这个例子中,通过第二行我们可以得到所有在10岁以上的学生名字,第三行可以得到每个年级学生的人数,第四行得到100个最大的学生信息。此外,DataFrame还支我们还可以通过isStreaming函数来判断一个DataFrame是否代表流数据代基于时间的时间窗口操在学习SparkStreaming时间窗口操作时,我们举过一个例子,是每隔10钟输出过去60秒的前十热点词。这个例子是基于处理时间而非时间的。要怎样实现,每隔10秒钟输出过去60秒内产生的前十热点词呢?你下边的代码代words=...#这个DataFrame代表词语的数据流,schema是{timestamp:Timestamp,word:23windowedCounts=window(words.timestamp,"1minute","10基于词语的生成时间,我们创建了一个窗口长度为1分钟,滑动间隔为10秒的window。然后,把输入的词语表根据window和词语本身聚合起来,并统计每个window内每个词语的数量。之后,再根据词语的数量进行排序,只返回前10的词语。在StructuredStreaming基于时间窗口的聚合操作中,groupBy是非常常用的输出结当经过各种SQL询操作之后,我们创建好了代表最终结果的DataFrame。下一步就是我们可以用Dataset.writeStream回的DataStreamWriter象去输出结果。它支持多种写入位置,如硬盘文件、Kafka、console和内存等。代query=.outputMode(complete.format(csv.option(path,pah/to/destination/dir789在上面这个代码例子中,我们选择了完全模式,把输出结果流写入了CSV文件StructuredStreamingSparkStreaming接下来,让我们对比一下StructuredStreaming上一讲学过的SparkStreaming。看简易度和性SparkStreaming提供的DStreamAPI与RDDAPI很类似,相对比较低level当我们编写SparkStreaming程序的时候,本质上就是要去构造RDD的DAG执行图然后通过SparkEngine运行。这样开发者身上的担子就很重,很多时候要自己想办法去高程序的处理效率。这不是Spark为一个数据处理框架想看到的。对于好的框架来说,trucuredSreaming提供的DaaFrameAPI就是这么一个相对高leel的API,大部分开发者都很熟悉关系型数据库和SQL。这样的数据抽象可以让他们用一套统一的方案去处理批处理和流处理,不用去关心具体的执行细节。而且,DataFrameAPI是在SparkSQL的引擎上执行的,SparkSQL有非常多的优化功能,比如执行计划优化和内存管理等,所以StructuredStreaming的应用程序性能很好。实时在上一讲中我们了解到,SparkStreaming准实时的,它能做到的最小延迟在一秒左虽然StructuredStreaming用的也是类似的微批处理思想,每过一个时间间隔就去拿来最新的数据加入到输入数据表中并更新结果,但是相比起SparkStreaming来说,它更像是实时处理,能做到用更小的时间间隔,最小延迟在100毫秒左右。而且在Spark2.3版本中,StructuredStreaming引入了连续处理的模式,可以做到真正的毫秒级延迟,这无疑大大拓展了StructuredStreaming的应用广度。不过现在连续处理对时间的支就像我们边讲过的,StructuredStreaming对基于时间的处理有很好的支持由于SparkStreaming是把数据按接收到的时间切分成一个个RDD来进行批处理,所以它很难基于数据本身的产生时间来进行处理。如果某个数据的处理时间和时间不一致的StructuredStreaming还有很多其他优点。比如,它有更好的容错性,保证了端到端exactlyonce语义等等。所以综合来说,StructuredStreaming比SparkStreaming在基于时间的窗口操作中,StructuredStreaming是怎样处理晚到达的数据,并且返比如,在每十分钟统计词频的例子中,一个词语在1:09被生成,在1:11被处理,程序在1:10和1:20都输出了对应的结果,在1:20输出时为什么可以把这个词语统计在内?这样 归科技所有 不得售卖。页面已增加防盗追踪,将依 上一 16|SparkStreaming:Spark的实时流计算下一 18|WordCount:从零开始运行你的第一个Spark应写言精选留言写言33…展leben 1展 sparkstructurestreaming有没有类似flink的sideOutput机制?支持超过watermark的事方 1我知道在flink中可以通过watermark来处理这样的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年飞行员执照考试《商用驾驶员直升机》冲刺试题及答案三
- 2026年台州学院单招职业适应性考试必刷测试卷附答案
- 常州市中医院传染病血清学检测考核
- 连云港市人民医院肺功能科研能力考核
- 杭州市中医院异位胃黏膜显像考核
- 南京市人民医院骨质疏松健康教育与康复考核
- 综合解析人教版八年级上册物理机械运动《运动的快慢》定向测评试题(详解)
- 南京市中医院消化系统解剖与生理学基础年度考核试卷
- 舟山市人民医院用户权限管理与审计追踪试题
- 福州市人民医院肿瘤编码专项考核
- 2025年河南淯水新城投资集团有限公司及下属子公司招聘17人考试参考试题及答案解析
- 自主维护课件
- 四川省宜宾丽彩集团有限公司招聘笔试题库2025
- 导游业务教学课件
- 装修工程竣工验收方案
- 安全生产法律法规考试题(附答案)
- 防爆电气装配工作业指导书
- 气象预警矩阵在气象灾害风险管理的应用与效果评估报告
- 新修订去极端化条例课件
- 数控机床维修知识培训课件
- 未成年人保护法规及义务教育培训资料
评论
0/150
提交评论