spark结构流总结

结构化数据流总览:

1、结构化流是可扩展,有容错机制的基于Spark Sql引擎的流处理引擎。我们可以像执行静态数据计算一样处理流计算,以为接口都已经封装好了。Spark Sql处理引擎会根据连续不断的流数据增量、连续地更新最终的结果。我们可以使用spark相关api进行流数据的聚合,event-time windows,Stream-to-batch join等。计算都是在经过优化的 spark sql引擎上进行的。系统会通过checkpointing和WriteAhead Logs来保证端对端的仅一次的容错保证。

2、结构化流查询默认是使用一个微批(micro-batch)处理引擎,这种查询把流数据处理当作一系列批任务来进行处理,这样可以达到端到端的时延低至100毫秒,并且有仅一次的容错保证机制。在spark 2.3以后,又出现一种新的低延时处理,叫做连续处理(Continuous Processing),它能实现端到端的低至1毫秒的时延和至少一次的容错保证机制。我们可以根据应用需求选择不同的模式,但是不需要改变代码操作(可能需要配置一下)。

 

编程模型:

1、结构化流的关键点是它把一个实时数据流当成了一个连续被添加的表(这个表被当成一个无界的表)。你可以像在静态数据上执行标准的批查询一样进行流计算,并且spark底层是对这个输入流得到的表进行增量查询的。

 

基本概念:

  1. 我们可以把输入流当成一个输入的表(Input Table),到达流的每一条数据都会被看作是天骄的输入表(Input Table)的一行。

 

  1. 流式计算最终将生成结果表(result table),每个触发器间隔(every trigger interval),只要有新的数据被添加到输入表(Input Table),就是被更新到结果表(Result Table)中。

  1. Output定义:指定什么内容被写入到外部的存储系统。它被定义为不同的模式:
    1. Complete Mode:整个更新的结果表会被写入到外部存储系统。由存储连接器决定怎样处理整个表的写入。
    2. Append Mode:只有最近一次时间间隔得到的输入流的新的行的计算结果会被写入到外部存储系统,(在spark 2.1.1以后可以使用),这个模式适合的情况:已经存在的于结果集的数据行是不会再改变了。
    3. Update Mode:只有被更新的行数据会写到外部存储系统。

每种模式都有自己的适用场景。

流式处理的编程结构和对静态数据的编程结构是一致的,具体的处理逻辑已经被封装的结构中去了。流式处理:当查询开始后,spark将会连续不断的检查是否有新的数据到来,如果有新的数据,spark将会执行一个增量的查询,这个查询将原先已经处理过的查询和现在的查询结合起来。

 

注意:结构化流并不会实例化整个的数据表,他从流数据源读取最新可用的数据,增量的处理他们,然后更新结果。然后就会将这一部分源数据丢掉。它只会根据要求保留很小的一部分中间状态的数据去更新整个结果。

 

这种模式和其他的流式处理的模式是显著不同的。很多流系统要求用户自己维护运行聚合,因此必须推断容错和数据一致性。(容错机制有 at-least-once,at-most-once,exactly-once)spark在有新的数据到来的时候负责更新结果集,从而减轻了用户对其的推理。

 

Handling Event-time and Late Data:

Event-time是指数据生成时的时间。而不是spark接受到数据的时间。

 

容错语义:

实现点对点的仅一次的语义是结构化流设计的主要目标之一。为了实现这个目标,流数据处理记录了每一个过程,以便在出现失败的地方重新计算或者重启等等操作。spark 引擎会更具checkpointing 和写日志记录这些信息。

 

Dataset和DataFrames的API的使用:

在spark 2.0以后,DataFrames和Dataset就能用来表示静态的,有边界的数据,同时也能用来表示流式的无边界的数据。和处理静态数据一样,我们可以用SparkSession来创建流失的DataFrames和Dataset,并且和处理静态数据一样的处理流式的数据。

 

创建流式DataFrames和流式Dataset:

流式的DataFrames可以通过DataStreamReader接口创建,SparkSession.readStream(),我们可以明确指明数据源的详细信息,包括 data format,schema,options等等。

 

数据源的来源可以有一下几个:

File Source:将一个文件夹中的文件作为流的数据源,支持的文件类型:text,csv,json,orc,parquet。请注意,文件必须原子放在给定目录中,在大多数文件系统中,可以通过文件移动操作来实现。

 

Kafka Source:可以从kafka读取数据,支持kafka0.10.0版本以上。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值