Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

时间:2021-07-13 23:39:56

Spark Streaming揭秘 Day12

数据安全容错(Executor篇)

今天,让我们研究下SparkStreaming在Executor端的数据安全及容错机制。

在SparkStreaming中一共使用了两种容错方式:

  1. 存储数据副本
  2. 支持数据重放

副本机制

这是默认的处理方式,先让我们进入数据存储代码:
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

我们发现,SparkStreaming中存储是直接调用了blockManager中进行,blockManager本身就支持数据副本,是通过stoageLevel字段的定义。
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

一直往代码源头寻找,我们发现了storageLevel的定义:MEMORY_AND_DISK_SER_2,也就是说,其两副本的处理方式。
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)
进入BlockManager,下面就是数据执行副本的代码,可以看到,为了提高效率,采用了线程池实现。
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

预写日志WAL

SparkStreaming中WAL机制和HBase比较接近,主要在如下代码中实现:
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

从代码中,我们可以看出几个特点:

  1. 必须要定义checkpoint目录(一般是放在hdfs上)
  2. 和副本方式相比,需要传递stream_id,也就是说WAL是按照receiver来管理的

让我们进入ReceivedBlockHandler中的实际处理部分:
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

我们发现在WAL模式中,其实数据是通过通过BlockManager和WAL中存放,也就WAL就是直接替代了原有BlockManager中的副本。

下面这段判断也能说明这点,一旦开启WAL后,其实会禁止副本数设置。
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

从WAL的运行看,我们发现,也是采用了线程池的方式,多线程处理在SparkStreaming中真是无处不在啊。
Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

最后,对于WAL方式来说,因为写数据是顺序写,不会修改数据,用指针遍历即可,速度还是比较快的;但是WAL主要还是定位于高安全性,还是会对性能有一定影响,适合允许一定延时的场景。对支持数据重放这个方案来说,最佳的方案是引入Kafka,这样天然就有容错和副本!!!

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580