Spark Streaming 的容错
Spark Streaming 为了实现容错特性,接收到的数据需要在集群的多个Worker 节点上的 executors 之间保存副本(默认2份)。当故障发生时,有两种数据需要恢复:
1. 已接收并且有副本的数据。当只有一台worker 发生故障时,这些数据不会丢失
2. 已接收但还没有副本的数据。只能从数据源重新获取
我们需要考虑两种发生故障的情况:
1. Worker 节点故障。如果receiver 运行在发生故障的worker 上,缓存的数据将丢失。
2. Driver 发生故障。很显然 SparkContext 将会丢失,所有executors连同其内存中的数据将会丢失。
了解容错之前,需要知道的数据处理的类型:
1. 最多一次。数据被处理一次或没被处理
2. 至少一次。数据被处理一次或多次
3. 仅有一次。有且仅有一次
可以看出,仅有一次是我们需要达到的目标。
Spark Streaming 数据处理的三个步骤:
1. 接收数据。
2. 处理数据。
3. 输出数据。最终结果被发送到外部系统。如FileSystem,Database等
Spark Streaming想要保证数据仅有一次被处理,以上三个步骤均需要保证仅有一次被处理。
1. 接收数据。 不同的数据来源有不同的保证。
(1)数据来源是文件系统。如果数据来源于容错的文件系统(如:HDFS),Spark Streaming 能保证此步骤中的数据仅被处理一次。
(2)数据来源基于Receiver。容错将取决于失败的类型和Receiver的类型。有以下两种Receiver
(a)可靠的Receiver。Receiver将会在把接收到的数据保存副本后和Source确认已收到数据。如果此类Receiver发生故障,那么Source将接收不到确认信息。Receiver重启后,Source会继续发送未被确认的信息。
(b)不可靠的Receiver。不会发送确认信息
如果Worker 发生故障,对于(a)数据不会丢失。对于(b)没有副本的数据会丢失。
如果Driver 发生故障,所有之前收到的数据都会丢失,这将影响有状态的操作。
为了解决上述丢失问题,Spark1.2 开始建议使用“write ahead logs” 机制,但是也只能保证“至少处理一次”。
(3)数据来源于Kafka Direct API。可以保证“仅被处理一次”。
2. 处理数据。Spark Streaming 内部RDD保证“仅被处理一次”。
3. 输出数据。默认保证“至少处理一次”。因为它取决于最终结果的操作类型和下游的系统(是否支持事务)。
当worker 发生故障时,输出操作可能会被执行多次。想要保证“仅被处理一次”,有以下两种方式:
(1)等价更新。如:输出操作是 saveAs***Files 操作时,因为写文件会直接覆盖原来的文件。
(2)事务更新。使输出的更新操作都具有事务。
(a)使用 batch time (存在于foreachRDD中) 和 RDD 的 partition index 组成唯一标识
(b)下游系统使用(a)中唯一标识来判断此数据是否被处理过。
dstream.foreachRDD { (rdd, time) =>
rdd.foreachPartition { partitionIterator =>
val partitionId = TaskContext.get.partitionId()
val uniqueId = generateUniqueId(time.milliseconds, partitionId)
// use this uniqueId to transactionally commit the data in partitionIterator
}
}
Spark Streaming 的容错的更多相关文章
- Spark Streaming的容错和数据无丢失机制
spark是迭代式的内存计算框架,具有很好的高可用性.sparkStreaming作为其模块之一,常被用于进行实时的流式计算.实时的流式处理系统必须是7*24运行的,同时可以从各种各样的系统错误中恢复 ...
- 62、Spark Streaming:容错机制以及事务语义
一. 容错机制 1.背景 要理解Spark Streaming提供的容错机制,先回忆一下Spark RDD的基础容错语义: 1.RDD,Ressilient Distributed Dataset,是 ...
- spark streaming的容错:防止数据丢失
官方这么说的 [Since Spark 1.2] Configuring write ahead logs - Since Spark 1.2, we have introduced write ah ...
- 3.spark streaming Job 架构和容错解析
一.Spark streaming Job 架构 SparkStreaming框架会自动启动Job并每隔BatchDuration时间会自动触发Job的调用. Spark Streaming的Job ...
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...
- 通过案例对 spark streaming 透彻理解三板斧之三:spark streaming运行机制与架构
本期内容: 1. Spark Streaming Job架构与运行机制 2. Spark Streaming 容错架构与运行机制 事实上时间是不存在的,是由人的感官系统感觉时间的存在而已,是一种虚幻的 ...
- Spark Streaming编程指南
Overview A Quick Example Basic Concepts Linking Initializing StreamingContext Discretized Streams (D ...
- Spark Streaming简介及原理
简介: SparkStreaming是一套框架. SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时流数据处理. 支持多种数据源获取数据: Spark ...
- <Spark><Spark Streaming>
Overview Spark Streaming为用户提供了一套与batch jobs十分相似的API,以编写streaming应用 与Spark的基本概念RDDs类似,Spark Streaming ...
随机推荐
- 英语发音规则---ir字母组合发音规律
英语发音规则---ir字母组合发音规律 一.总结 一句话总结: 这个字母组合通常在单词中读[ɜː]:girl /gɜːl/ n. :shirt /ʃɜːt/ n. girl /gɜːl/ n. 女孩 ...
- PL/SQL学习笔记_03_存储函数与存储过程
ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. 存储函数:有返回值,创建完成后,通过select function() from dua ...
- sqlserver 新建只读权限用户
1,新建只能访问某一个表的只读用户. --添加只允许访问指定表的用户:execsp_addlogin'用户名','密码','默认数据库名' --添加到数据库execsp_grantdbaccess'用 ...
- BEC listen and translation exercise 33
In fact, if it is a really hot day, like the sort of weather we had last summer, you are advised to ...
- Java 网络通信(TCP/UDP)
1.InetAdress类 与 Socket类 >InetAdress >Socket 2.TCP/IP协议簇 客户端: 创建 Socket:根据指定服务端的 IP 地址或端口号构 ...
- A唐纳德先生和假骰子(华师网络赛)
Time limit per test: 1.0 seconds Memory limit: 256 megabytes 在进行某些桌游,例如 UNO 或者麻将的时候,常常会需要随机决定从谁开始.骰子 ...
- Asp.Net页面生命周期【转载,地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html】
一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页 ...
- Mysql 排序null值 排序问题分析
mysql中null值的排序问题分析 如下表t_user: name age zhangsan 1 lisi NULL wangwu 2 www.2cto.com 执行一下sql: S ...
- poj3585 Accumulation Degree[树形DP换根]
思路其实非常简单,借用一下最大流求法即可...默认以1为根时,$f[x]$表示以$x$为根的子树最大流.转移的话分两种情况,一种由叶子转移,一种由正常孩子转移,判断一下即可.换根的时候由頂向下递推转移 ...
- backbonejs学习
文章: http://www.cnblogs.com/yexiaochai/archive/2013/07/27/3219402.html http://blog.csdn.net/cony100/a ...