12、Spark Streaming源码解读之Executor容错安全性

原创 2016年05月30日 09:46:50
一、Spark Streaming 数据安全性的考虑:
  1. Spark Streaming不断的接收数据,并且不断的产生Job,不断的提交Job给集群运行。所以这就涉及到一个非常重要的问题数据安全性。
  2. Spark Streaming是基于Spark Core之上的,如果能够确保数据安全可好的话,在Spark Streaming生成Job的时候里面是基于RDD,即使运行的时候出现问题,那么Spark Streaming也可以借助Spark Core的容错机制自动容错。
  3. 对Executor容错主要是对数据的安全容错
  4. 为啥这里不考虑对数据计算的容错:计算的时候Spark Streaming是借助于Spark Core之上的容错的,所以天然就是安全可靠的。

Executor容错方式: 
1. 最简单的容错是副本方式,基于底层BlockManager副本容错,也是默认的容错方式。 

2.WAL日志方式

3. 接收到数据之后不做副本,支持数据重放,所谓重放就是支持反复读取数据。


BlockManager备份:

  1. 默认在内存中两份副本,也就是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.

  1. DirectKafkaInputDStream会去查看最新的offSet,并且把offSet放到Batch中。
  2. 在Batch每次生成的时候都会调用latestLeaderOffsets查看最近的offSet,此时的offSet就会与上一个offSet相减获得这个Batch的范围。这样就可以知道读那些数据。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明,否则将追究法律责任。

Spark Streaming源码解读之Executor容错安全性

本篇博文的目标是 1. Executor的WAL机制详解 2. 消息重放Kafka数据安全性的考虑: Spark Streaming不断的接收数据,并且不断的产生Job,不断的提交Job给集群...
  • snail_gesture
  • snail_gesture
  • 2016年05月24日 15:22
  • 10022

第12课:Spark Streaming源码解读之executor容错安全性

本期内容: 1.Executor的WAL 2.消息重放 3.其它   StorageLevel.scala Memory不够的时候才考虑disk classStorageLevel p...
  • luobailian
  • luobailian
  • 2016年05月22日 18:08
  • 427

第12课:Spark Streaming源码解读之Executor容错安全性

本节从安全角度来讲解sparkstreaming,因为sparkstreaming会不断的接收数据、不断的产生job、不断的提交job。所以有一个至关重要的问题就是数据安全性。     由于spar...
  • ytmhame111111
  • ytmhame111111
  • 2016年05月22日 16:35
  • 550

第12课 :Spark Streaming源码解读之Executor容错安全性

第12课 :Spark Streaming源码解读之Executor容错安全性   1、从数据安全的角度考虑,Spark Streaming不断的接收数据,不断的生成job,不断的提交job,数据的...
  • duan_zhihua
  • duan_zhihua
  • 2016年05月22日 16:50
  • 427

Spark Streaming之Executor容错安全性

内容: 1 Executor WAL 2 消息重放 3 其他
  • sinat_25306771
  • sinat_25306771
  • 2016年05月24日 11:56
  • 344

Spark Streaming源码解读之Driver容错安全性

本篇博文的目标如下: 1. ReceiverBlockTracker容错安全性 2. DStream和JobGenerator容错安全性文章的组织思路如下: 考虑Driver容错安全性,...
  • snail_gesture
  • snail_gesture
  • 2016年05月24日 19:32
  • 10254

Spark集群容错场景介绍

容错指的是一个系统在部分模块出现故障时还能否持续的对外提供服务,一个高可用的系统应该具有很高的容错性;对于一个大的集群系统来说,机器故障、网络异常等都是很常见的,spark这样的大型分布式计算集群提供...
  • liujianhuiouc
  • liujianhuiouc
  • 2016年08月26日 16:53
  • 1297

Spark学习笔记(12)源码解读之Executor容错安全性

本期内容: 1. Executor的WAL 2. 消息重放 最天然的数据容错就是利用数据副本,另外一种是数据源支持重放。 基于BlockManager来做数据备份,...
  • xiangxizhishi
  • xiangxizhishi
  • 2017年08月30日 00:09
  • 114

解密SparkStreaming运行机制和架构进阶之Job和容错(第三篇)

本期要点: 1、探讨Spark Streaming Job架构和运行机制 2、探讨Spark Streaming 容错机制...
  • xiaojun220
  • xiaojun220
  • 2016年05月07日 10:47
  • 1302

Spark定制班第12课:Spark Streaming源码解读之Executor容错安全性

本期内容: 1. Executor的WAL 2. 消息重放 最天然的数据容错就是利用数据副本,另外一种是数据源支持重放。 基于BlockManager来做数据备份,StorageLeve...
  • andyshar
  • andyshar
  • 2016年05月23日 17:17
  • 409
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:12、Spark Streaming源码解读之Executor容错安全性
举报原因:
原因补充:

(最多只允许输入30个字)