在Spark框架当中,其负责流计算任务的组件,主要是Spark Streaming,但是随着大数据继续发展,Spark Streaming也开始有了各种场景下的局限,于是又推出了Structured Streaming。今天的大数据学习分享,我们就来对Spark Streaming 和 Structured Streaming对个简单的对比。
关于 Spark Streaming
Spark Streaming是Spark最初的流处理框架,使用了微批的形式来进行流处理。提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个RDD,源源不断对RDD进行处理来实现流计算。
关于 Structured Streaming
Spark 2.X出来的流框架,采用了无界表的概念,流数据相当于往一个表上不断追加行。基于Spark SQL引擎实现,可以使用大多数Spark SQL的function。
Spark Streaming 和 Structured Streaming区别
①流模型
Spark Streaming采用微批的处理方法。每一个批处理间隔的为一个批,也就是一个RDD,我们对RDD进行操作就可以源源不断的接收、处理数据。
Structured Streaming将实时数据当做被连续追加的表,流上的每一条数据都类似于将一行新数据添加到表中。
②RDD vs DataFrame、DataSet
Spark Streaming中的DStream编程接口是RDD,我们需要对RDD进行处理,处理起来较为费劲且不美观。
Structured Streaming使用DataFrame、DataSet的编程接口,处理数据时可以使用Spark SQL中提供的方法,数据的转换和输出会变得更加简单。
③ Process Time vs Event Time
Process Time:流处理引擎接收到数据的时间
Event Time:事件真正发生的时间
Spark Streaming中由于其微批的概念,会将一段时间内接收的数据放入一个批内,进而对数据进行处理。划分批的时间是Process Time,而不是Event Time,Spark Streaming没有提供对Event Time的支持。
Structured Streaming提供了基于事件时间处理数据的功能,如果数据包含事件的时间戳,就可以基于事件时间进行处理。
④可靠性保障
两者在可靠性保证方面都是使用了checkpoint机制。checkpoint通过设置检查点,将数据保存到文件系统,在出现出故障的时候进行数据恢复。
在Spark Streaming中,如果我们需要修改流程序的代码,在修改代码重新提交任务时,是不能从checkpoint中恢复数据的(程序就跑不起来),是因为spark不认识修改后的程序了。
在Structured Streaming中,对于指定的代码修改操作,是不影响修改后从checkpoint中恢复数据的。
⑤ sink
二者的输出数据(写入下游)的方式有很大的不同。
Spark Streaming中提供了foreachRDD()方法,通过自己编程实现将每个批的数据写出。
Structured Streaming自身提供了一些sink(Console Sink、File Sink、Kafka Sink等),只要通过option配置就可以使用;对于需要自定义的Sink,提供了ForeachWriter的编程接口,实现相关方法就可以完成。
总体来说,Structured Streaming有更简洁的API、更完善的流功能、更适用于流处理。而spark streaming,更适用于与偏批处理的场景。
关于大数据学习,Spark Streaming 与Structured Streaming的却别对比,以上就为大家做了简单的介绍了。目前,Spark Streaming仍有用武之地,而Structured Streaming也在快速发展当中,二者需根据实际需求考虑使用。成都加米谷大数据,专业
大数据培训机构,大数据开发、数据分析与挖掘,本月新班开课,课程大纲及试学视频可联系客服领取!