Spark Streaming揭秘 Day12 数据安全容错(Executor篇)
Spark Streaming揭秘 Day12
数据安全容错(Executor篇)
今天,让我们研究下SparkStreaming在Executor端的数据安全及容错机制。
在SparkStreaming中一共使用了两种容错方式:
- 存储数据副本
- 支持数据重放
副本机制
这是默认的处理方式,先让我们进入数据存储代码:

我们发现,SparkStreaming中存储是直接调用了blockManager中进行,blockManager本身就支持数据副本,是通过stoageLevel字段的定义。

一直往代码源头寻找,我们发现了storageLevel的定义:MEMORY_AND_DISK_SER_2,也就是说,其两副本的处理方式。

进入BlockManager,下面就是数据执行副本的代码,可以看到,为了提高效率,采用了线程池实现。

预写日志WAL
SparkStreaming中WAL机制和HBase比较接近,主要在如下代码中实现:

从代码中,我们可以看出几个特点:
- 必须要定义checkpoint目录(一般是放在hdfs上)
- 和副本方式相比,需要传递stream_id,也就是说WAL是按照receiver来管理的
让我们进入ReceivedBlockHandler中的实际处理部分:

我们发现在WAL模式中,其实数据是通过通过BlockManager和WAL中存放,也就WAL就是直接替代了原有BlockManager中的副本。
下面这段判断也能说明这点,一旦开启WAL后,其实会禁止副本数设置。

从WAL的运行看,我们发现,也是采用了线程池的方式,多线程处理在SparkStreaming中真是无处不在啊。

最后,对于WAL方式来说,因为写数据是顺序写,不会修改数据,用指针遍历即可,速度还是比较快的;但是WAL主要还是定位于高安全性,还是会对性能有一定影响,适合允许一定延时的场景。对支持数据重放这个方案来说,最佳的方案是引入Kafka,这样天然就有容错和副本!!!
欲知后事如何,且听下回分解
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)的更多相关文章
- Spark Streaming揭秘 Day13 数据安全容错(Driver篇)
Spark Streaming揭秘 Day13 数据安全容错(Driver篇) 书接上回,首先我们要考虑的是在Driver层面,有哪些东西需要维持状态,只有在需要维持状态的情况下才需要容错,总的来说, ...
- Spark Streaming揭秘 Day5 初步贯通源码
Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...
- Spark Streaming揭秘 Day4-事务一致性(Exactly one)
Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...
- Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘
Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...
- Spark Streaming揭秘 Day35 Spark core思考
Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...
- Spark Streaming揭秘 Day33 checkpoint的使用
Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...
- Spark Streaming揭秘 Day32 WAL框架及实现
Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...
- Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为St ...
- Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
随机推荐
- Linux命令行技巧
Linux命令行技巧 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man | ps2pdf - > man.pdf 生成一个PDF格 ...
- CSS skills: 3) show sub-navigate items when mouse hove on nav-item
<header> <div class="am-g am-g-fixed"> <ul class="am-avg-lg-2 topbar f ...
- The Story of self Parameter in Python, Demystified
转自:http://www.programiz.com/article/python-self-why If you have been programming in Python (in obj ...
- [转]让ORACLE LIKE 时不区分大小写
本文转自:http://hi.baidu.com/dosttyy/item/9073803df47ef9f62784f49a 让ORACLE LIKE 时不区分大小写: select * from t ...
- [改善Java代码]动态加载不适合数组
上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类------8中基本类型就排除在外.它们不是一个具体的类. 其次它 ...
- Spring 简单入门实例
首先新建一个Web 项目 导入相应Jar 包 <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- 对微信小程序的看法,不吹不黑
今日微信小程序正式上线了,昨天也稍稍地研究了一下小程序的概念以及开发过程.简而言之,微信小程序就是一款在微信端的轻应用,其实在支付宝也有类似的功能,只不过支付宝没有开放接口,而微信开放了接口供开发者开 ...
- 自动化中的PageObject思想
谈着这个话题很大,因为我自己在自动化分层的方面做的就不是很好,最近在做java+selenium中,如果不分层去管理,代码就显得很乱,如下: 下面代码主要是做了一个登录,登录后在修改自己的一些个人信息 ...
- java的回忆录
封装的三步骤:(1)加属性(成员变量.全局变量.域field)用private来修饰(2)为对应的属性生成共有的setter.getter方法(3)在对应的setter的方法中可以根据需要加入对应的验 ...
- Nginx - SSI Module
SSI, for Server Side Includes, is actually a sort of server-side programming language interpreted by ...