Sparkstreaming实时开发详解(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spark Streaming接收Kafka、Flume、HDFS等各种来源的实时输入数据,可以使用诸如map、reduce、join等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,处理结果保存到HDFS,数据库等。

六、SparkStreaming窗口操作


Spark提供了一组 窗口操作,通过滑动窗口技术对大规模数据的增量更新进行统计分析

image.png



• Window Operation: 定时进行一定时间段内的数据处理(上图time 3 4 5  每个2秒,一共6秒)

• 任何基于窗口操作需要指定两个参数:

image.png


– 窗口总长度(window length)10s

– 滑动时间间隔(slide interval)  2s


执行代码前先启动nc -lk 9999

image.png



执行代码:整个窗口长度10s,每2秒打印一次

改代码:

1.上代码改为seconds(10),second(3),报错,必须为scc seconds的整数倍

2.改为seconds(9),second(2)也出错,如下图,也必须为上scc seconds整数倍


七、Sparkstreaming全局统计量


• 如果要使用updateStateByKey算子,就必须设置一个checkpoint目录,开启checkpoint机制


• 这样的话才能把每个key对应的state除了在内存中有,那么是不是也要checkpoint一份


• 因为你要长期保存一份key的state的话,那么spark streaming是要求必须用checkpoint的,以便于在内存数据丢失的时候,可以从checkpoint中恢复数据

image.png


左10s统计结果,右再过2s统计结果,最后 全局合并统计updatestatebykey,要开启checkpoint且先nc -lp 9999

image.png


再输入7个a后

image.png

image.png

image.png


Sparkstreaming容错性分析

(RDD容错靠血缘关系DAG,sparkstreaming靠WAL)

• 实时的流式处理系统必须是7*24运行的,同时可以从各种各样的系统错误中恢复,在设计之初,Spark Streaming就支持driver和worker节点的错误恢复。


1. Worker容错:spark和rdd的保证worker节点的容错性。spark streaming构建在spark之上,所以它的worker节点也是同样的容错机制


•2.Driver容错:依赖WAL(WriteAheadLog)持久化日志


– 启动WAL需要做如下的配置


– 1:给streamingContext设置checkpoint的目录,该目录必须是HADOOP支持的文件系统hdfs,用来保存WAL和


做Streaming的checkpoint


– 2:spark.streaming.receiver.writeAheadLog.enable 设置为true; receiver才有WAL


Sparkstreaming中WAL简介

• Spark应用分布式运行的,如果driver进程挂了,所有的executor进程将不可用,保存在这些进程所


持有内存中的数据将会丢失。为了避免这些数据的丢失,Spark Streaming中引入了一个WAL.


• WAL在文件系统和数据库中用于数据操作的持久化,先把数据写到一个持久化的日志中,然后对数


据做操作,如果操作过程中系统挂了,恢复的时候可以重新读取日志文件再次进行操作。


• 如果WAL 启用了,所有接收到的数据会保存到一个日志文件中去(HDFS), 这样保存接收数据的持


久性,此外,如果只有在数据写入到log中之后接收器才向数据源确认,这样drive重启后那些保存在


内存中但是没有写入到log中的数据将会重新发送,这两点保证的数据的无丢失。


WAL工作原理


driver=AM  ,  executor=worker节点          

block+文件数据(代码)WAL   两部分结合

image.png

1. 蓝色的箭头表示接收的数据:

– 接收器把数据流打包成块,存储在executor的内存中,如果开启了WAL,将会把数据写入到存在容错文


件系统的日志文件中


2. 青色的箭头表示提醒driver:


– 接收到的数据块的元信息发送给driver中的StreamingContext, 这些元数据包括:executor内存中数据


块的引用ID和日志文件中数据块的偏移信息


3. 红色箭头表示处理数据:


– 每一个批处理间隔,StreamingContext使用块信息用来生成RDD和jobs. SparkContext执行这些job用


于处理executor内存中的数据块


4. 黄色箭头表示checkpoint这些计算:


– 以便于恢复。流式处理会周期的被checkpoint到文件中

image.png


Sparkstreaming消费kafka


Spark Streaming 接受数据的方式有两种: 只有receive有wal,direct不需要

• Receiver-based Approach:offset存储在zookeeper,由Receiver维护,Spark获取数据存入executor中,调用


Kafka高阶API

image.png

• Direct Approach (No Receivers):offset自己存储和维护,由Spark维护,且可以从每个分区读取数据,调用Kafka低阶API

image.png


SparkstreamingonKafkaDirect

1. Direct的方式是会直接操作kafka底层的元数据信息

2. 由于直接操作的是kafka,kafka就相当于底层的文件系统(对应receiver的executor内存)。


3. 由于底层是直接读数据,没有所谓的Receiver,直接是周期性(Batch Intervel)的查询kafka,


处理数据的时候,我们会使用基于kafka原生的Consumer api来获取kafka中特定范围(offset


范围)中的数据。


4. 读取多个kafka partition,Spark也会创建RDD的partition ,这个时候RDD的partition和


kafka的partition是一致的。


5. 不需要开启wal机制,从数据零丢失的角度来看,极大的提升了效率,还至少能节省一倍的磁盘


空间。从kafka获取数据,比从hdfs获取数据,因为zero copy的方式,速度肯定更快。


Direct与 Receiver对比

• 从容错角度:


– Receiver(高层次的消费者API):在失败的情况下,有些数据很有可能会被处理不止一次。 接收到的数


据被可靠地保存到WAL中,但是还没有来得及更新Zookeeper中Kafka偏移量。导致数据不一致性:


Streaming知道数据被接收,但Kafka认为数据还没被接收。这样系统恢复正常时,Kafka会再一次发送这


些数据。at least once


– Direct(低层次消费者API):给出每个batch区间需要读取的偏移量位置,每个batch的Job被运行时,


对应偏移量的数据从Kafka拉取,偏移量信息也被可靠地存储(checkpoint),在从失败中恢复可以直接


读取这些偏移量信息。exactly once


Direct API消除了需要使用WAL的Receivers的情况,而且确保每个Kafka记录仅被接收一次并被高效地接收


。这就使得我们可以将Spark Streaming和Kafka很好地整合在一起。总体来说,这些特性使得流处理管道拥


有高容错性,高效性,而且很容易地被使用。

目录
相关文章
|
消息中间件 分布式计算 Kafka
195 Spark Streaming整合Kafka完成网站点击流实时统计
195 Spark Streaming整合Kafka完成网站点击流实时统计
82 0
|
1月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
77 5
|
消息中间件 数据可视化 关系型数据库
(3)sparkstreaming从kafka接入实时数据流最终实现数据可视化展示
1)我们通过kafka与各个业务系统的数据对接,将各系统中的数据实时接到kafka; 2)通过sparkstreaming接入kafka数据流,定义时间窗口和计算窗口大小,业务计算逻辑处理; 3)将结果数据写入到mysql; 4)通过可视化平台接入mysql数据库,这里使用的是NBI大数据可视化构建平台; 5)在平台上通过拖拽式构建各种数据应用,数据展示;
(3)sparkstreaming从kafka接入实时数据流最终实现数据可视化展示
|
5月前
|
分布式计算 数据处理 流计算
实时计算 Flink版产品使用问题之使用Spark ThriftServer查询同步到Hudi的数据时,如何实时查看数据变化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
消息中间件 关系型数据库 MySQL
Spark实时(数据采集)项目
Spark实时(数据采集)项目
158 2
|
7月前
|
消息中间件 分布式计算 Kafka
Spark与Kafka的集成与流数据处理
Spark与Kafka的集成与流数据处理
|
消息中间件 分布式计算 NoSQL
Sparkstreaming 介绍-架构 | 学习笔记
快速学习 Sparkstreaming 介绍-架构
Sparkstreaming 介绍-架构 | 学习笔记
|
消息中间件 存储 分布式计算
Sparkstreaming实时开发详解(一)
Spark Streaming接收Kafka、Flume、HDFS等各种来源的实时输入数据,可以使用诸如map、reduce、join等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,处理结果保存到HDFS,数据库等。
138 0
Sparkstreaming实时开发详解(一)
|
分布式计算 流计算 Spark
利用Spark Streaming实现分布式采集系统
之前我在微信朋友圈发了一段话,说明Spark Streaming 不仅仅是流式计算,也是一类通用的模式,可以让你只关注业务逻辑而无需关注分布式相关的问题而迅速解决业务问题.
3456 0