- Spark Streaming不断的接收数据,并且不断的产生Job,不断的提交Job给集群运行。所以这就涉及到一个非常重要的问题数据安全性。
- Spark Streaming是基于Spark Core之上的,如果能够确保数据安全可好的话,在Spark Streaming生成Job的时候里面是基于RDD,即使运行的时候出现问题,那么Spark Streaming也可以借助Spark Core的容错机制自动容错。
- 对Executor容错主要是对数据的安全容错
- 为啥这里不考虑对数据计算的容错:计算的时候Spark Streaming是借助于Spark Core之上的容错的,所以天然就是安全可靠的。
Executor容错方式:
1. 最简单的容错是副本方式,基于底层BlockManager副本容错,也是默认的容错方式。
2.WAL日志方式
3. 接收到数据之后不做副本,支持数据重放,所谓重放就是支持反复读取数据。
BlockManager备份:
- 默认在内存中两份副本,也就是Spark Streaming的Receiver接收到数据之后存储的时候指定StorageLevel为MEMORY_AND_DISK_SER_2,底层存储是交给BlockManager,BlockManager的语义确保了如果指定了两份副本,一般都在内存中。所以至少两个Executor中都会有数据。
Receiver将数据交给BlockManger是由ReceiveredBlockHandler来处理的,有两种ReceiveredBlockHandler的实现:
1.WriteAheadLogBasedBlockHandler
2.BlockManagerBasedBlockHandler
这里的storageLevel是构建InputDStream时传入的,socketTextStream的默认存储级别是StorageLevel.MEMORY_AND_DISK_SER_2
如果使用WriteAheadLogBasedBlockHandler需要开启WAL,默认并没有开启:
WAL日志方式:
这种方式会现将数据写入日志文件,就是checkpoint目录,出现异常是,从checkpoint目录重新读取数据,进行恢复。启动WAL时候,没必要将副本数设置成大于1,也不需要序列化。
WAL会将数据同时写入BlockManager和write ahead log,而且是并行的写block,当然两处的block存储完成,才会返回。
将Block 存入BlockManager:
将Block 存入WAL日志:
WAL写数据的时候是顺序写,数据不可修改,所以读的时候只需要按照指针(也就是要读的record在那,长度是多少)读即可。所以WAL的速度非常快。
浏览一下WriteAheadLog,他是一个抽象类:
看一下
WriteAheadLog的一个实现类FileBasedWriteAheadLog的write方法:
根据不同时间获取不同Writer将序列化结果写入文件,返回一个
FileBasedWriteAheadLogSegment类型的对象fileSegment。
读数据:
其中创建了一个FileBaseWriteAheadLogRandomReader对象,然后调用了该对象的read方法:
支持数据重放。
在实际的开发中直接使用Kafka,因为不需要容错,也不需要副本。
Kafka有Receiver方式和Direct方式
Receiver方式:是交给Zookeeper去管理数据的,也就是偏移量offSet.如果失效后,Kafka会基于offSet重新读取,因为处理数据的时候中途崩溃,不会给Zookeeper发送ACK,此时Zookeeper认为你并没有消息这个数据。但是在实际中越来用的越多的是Direct的方式直接操作offSet.而且还是自己管理offSet.
- DirectKafkaInputDStream会去查看最新的offSet,并且把offSet放到Batch中。
- 在Batch每次生成的时候都会调用latestLeaderOffsets查看最近的offSet,此时的offSet就会与上一个offSet相减获得这个Batch的范围。这样就可以知道读那些数据。
相关推荐
### Spark Core 源码解读 Spark Core源码的解读涉及到理解以下几个关键部分: 1. **架构组件**:在Spark的主从架构中,包括Driver和Executor两种角色。Driver负责作业的分解和任务调度,而Executor则执行Driver...
在容错方面,Spark Streaming支持两种容错机制:Executor端长时容错和Driver端长时容错。这些机制确保即使出现故障,应用的持续运行也不会受到影响。 Structured Streaming是Spark 2.x中引入的模块,其目的是提供一...
8. **Spark Streaming**:Spark Streaming构建在微批处理之上,通过将流数据划分为小批次处理,实现了低延迟的实时流处理。 9. **MLlib与Spark ML**:Spark提供了机器学习库MLlib,以及基于DataFrame的ML,支持各种...
2. **Spark 核心组件**:Spark 包含多个组件,如 Spark Core、Spark SQL、Spark Streaming、MLlib 和 GraphX。Spark Core 提供基本的调度、内存管理和故障恢复功能;Spark SQL 提供了 SQL 查询接口,支持与多种数据...
《深入理解Spark:核心思想及源码分析》这本书旨在帮助读者深入掌握Apache Spark这一大数据处理框架的核心原理与实现细节。Spark作为一个快速、通用且可扩展的数据处理系统,已经在大数据领域得到了广泛应用。它提供...
2. **Spark SQL**:Spark SQL是Spark用于结构化数据处理的模块,它可以与传统SQL数据库进行交互,并支持DataFrame和Dataset API,这些API使得开发人员可以使用强类型的数据处理方式,提高了代码的可读性和安全性。...
《深入理解Spark:核心思想与源码分析》一书旨在帮助读者全面掌握Spark的核心概念、设计哲学以及其实现原理。Spark作为一个快速、通用且可扩展的大数据处理框架,其高效性能和灵活的数据处理能力在大数据领域备受...
《深入理解Spark核心思想与源码分析》这本书深入剖析了Apache Spark这一大数据处理框架的核心设计理念与实现机制。Spark作为分布式计算的重要工具,以其高效的内存计算、易用的API和广泛的应用场景深受业界青睐。...
Spark源码提供了深入了解其内部工作原理的机会,这对于开发者优化应用性能、解决技术问题或者进行二次开发至关重要。官方示例则为初学者提供了一个快速上手和理解Spark功能的平台。 在Spark源码中,我们可以深入...
《Spark源码分析》这本书是针对那些希望深入了解大数据处理框架Spark以及与其紧密相关的Hadoop技术的专业人士所编写的。Spark作为一个快速、通用且可扩展的数据处理引擎,已经在大数据领域占据了重要地位,而深入...
在本提供的资源中,我们有一个已经编译完成的Spark 1.6.1版本的源码包,这对于想要深入理解Spark工作原理、进行二次开发或者进行性能优化的开发者来说非常有价值。 **Spark核心组件与架构** Spark的核心组件包括:...
Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、灵活和易用性而闻名。本篇文章将深入探讨Spark的核心思想,并引导你逐步走进Spark的源码世界,揭示其背后的运行机制。 一、Spark的基本架构与核心...
Apache Spark 是一个强大的分布式计算框架,它以高效、易用和通用性著称。这个压缩包包含三本书籍,分别从不同的角度深入探讨了Spark的设计、实现和源码解析,对于理解和掌握Spark的核心原理和技术至关重要。 ...
Spark社区不断推出新特性,如Structured Streaming、Spark SQL中的Columnar存储和Parquet格式支持等,以提升性能和易用性。此外,还可以通过调整配置参数、使用更高效的存储策略、并行度优化等方式来提升Spark应用的...
7. **Shuffle服务**:Spark 1.6.0引入了独立的shuffle服务,提高了shuffle操作的性能和容错性。源码中,可以学习到如何实现shuffle的磁盘溢出策略和数据压缩机制。 8. **配置和API**:Spark的配置系统允许用户...
Spark是Apache基金会下的一个开源大数据处理框架,以其高效、易用和灵活性著称。Spark-2.2.1是该框架的一个稳定版本,提供了一系列增强的功能和优化。这个压缩包"spark-2.2.1.tar.gz"包含了Spark源代码,使得开发者...
《Spark核心思想与源码分析》是一份深入探讨Apache Spark技术的资料,旨在帮助读者理解Spark的内在工作原理,从而更好地应用和优化这个大数据处理框架。Spark作为一个分布式计算框架,以其高效、易用和可扩展性赢得...
9. **Spark Streaming**:Spark Streaming提供了一种可扩展且高容错的实时数据处理能力。`org.apache.spark.streaming`包下的`DStream`(Discrete Stream)表示连续的数据流,`DStream`操作构建了复杂的流处理逻辑。...
《深入理解Spark:核心思想与源码分析》是一本针对Apache Spark进行深度解析的专业书籍,旨在帮助读者透彻掌握Spark的核心理念与实现机制。Spark作为大数据处理领域的重要框架,其高性能、易用性和弹性分布式计算的...