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

  • 相关阅读:
    NumPy 百题大冲关,冲鸭!
    33 个送给 Java 程序员的练手项目合集
    比特币——带你掌握未来的技术和财富
    HTML5 蔡徐坤打篮球游戏 NMSL❤️❤️❤️
    网络协议基础:“工作中模模糊糊的概念,这次终于理顺了!”
    昨天521表白失败,我想用Python分析一下...表白记录和聊天记录
    有哪些好用不火的软件?
    如何处理负载、高并发?
    怎么实现第三方登录?
    购物车的原理?
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5513742.html
Copyright © 2011-2022 走看看