zoukankan      html  css  js  c++  java
  • Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

    Spark Streaming揭秘 Day12

    数据安全容错(Executor篇)

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

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

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

    副本机制

    这是默认的处理方式,先让我们进入数据存储代码:
    Snip20160520_10

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

    一直往代码源头寻找,我们发现了storageLevel的定义:MEMORY_AND_DISK_SER_2,也就是说,其两副本的处理方式。
    Snip20160520_12
    进入BlockManager,下面就是数据执行副本的代码,可以看到,为了提高效率,采用了线程池实现。
    Snip20160520_13

    预写日志WAL

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

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

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

    让我们进入ReceivedBlockHandler中的实际处理部分:
    Snip20160520_17

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

    下面这段判断也能说明这点,一旦开启WAL后,其实会禁止副本数设置。
    Snip20160520_20

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

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

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

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

  • 相关阅读:
    所有HTTP返回状态值,并说明用途
    几个简单的排序算法
    Linux命令大全
    存储过程中执行动态Sql语句
    IE8的背景不显示和图片错位 解决方案
    海量数据处理方法
    关于MSSQL的返回值问题
    SQL Server 2008不能修改表的解决方法
    转:读AD里特殊的属性in C#
    了解SMS的主要特性。
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5513742.html
Copyright © 2011-2022 走看看